{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import math\n",
    "import datetime\n",
    "import warnings\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.model_selection import GridSearchCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "warnings.filterwarnings(\"ignore\")\n",
    "from matplotlib.pylab import rcParams\n",
    "rcParams['figure.figsize'] = (15, 5)\n",
    "pd.set_option('display.max_rows', 500)\n",
    "pd.set_option('display.max_columns', 500)\n",
    "pd.set_option('display.width', 1000)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Reading Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(12690, 9)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train = pd.read_excel('Data_Train.xlsx')\n",
    "ntrain = df_train.shape[0]\n",
    "df_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>TITLE</th>\n",
       "      <th>RESTAURANT_ID</th>\n",
       "      <th>CUISINES</th>\n",
       "      <th>TIME</th>\n",
       "      <th>CITY</th>\n",
       "      <th>LOCALITY</th>\n",
       "      <th>RATING</th>\n",
       "      <th>VOTES</th>\n",
       "      <th>COST</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CASUAL DINING</td>\n",
       "      <td>9438</td>\n",
       "      <td>Malwani, Goan, North Indian</td>\n",
       "      <td>11am – 4pm, 7:30pm – 11:30pm (Mon-Sun)</td>\n",
       "      <td>Thane</td>\n",
       "      <td>Dombivali East</td>\n",
       "      <td>3.6</td>\n",
       "      <td>49 votes</td>\n",
       "      <td>1200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>CASUAL DINING,BAR</td>\n",
       "      <td>13198</td>\n",
       "      <td>Asian, Modern Indian, Japanese</td>\n",
       "      <td>6pm – 11pm (Mon-Sun)</td>\n",
       "      <td>Chennai</td>\n",
       "      <td>Ramapuram</td>\n",
       "      <td>4.2</td>\n",
       "      <td>30 votes</td>\n",
       "      <td>1500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>CASUAL DINING</td>\n",
       "      <td>10915</td>\n",
       "      <td>North Indian, Chinese, Biryani, Hyderabadi</td>\n",
       "      <td>11am – 3:30pm, 7pm – 11pm (Mon-Sun)</td>\n",
       "      <td>Chennai</td>\n",
       "      <td>Saligramam</td>\n",
       "      <td>3.8</td>\n",
       "      <td>221 votes</td>\n",
       "      <td>800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>QUICK BITES</td>\n",
       "      <td>6346</td>\n",
       "      <td>Tibetan, Chinese</td>\n",
       "      <td>11:30am – 1am (Mon-Sun)</td>\n",
       "      <td>Mumbai</td>\n",
       "      <td>Bandra West</td>\n",
       "      <td>4.1</td>\n",
       "      <td>24 votes</td>\n",
       "      <td>800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>DESSERT PARLOR</td>\n",
       "      <td>15387</td>\n",
       "      <td>Desserts</td>\n",
       "      <td>11am – 1am (Mon-Sun)</td>\n",
       "      <td>Mumbai</td>\n",
       "      <td>Lower Parel</td>\n",
       "      <td>3.8</td>\n",
       "      <td>165 votes</td>\n",
       "      <td>300</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               TITLE  RESTAURANT_ID                                    CUISINES                                    TIME     CITY        LOCALITY RATING      VOTES  COST\n",
       "0      CASUAL DINING           9438                 Malwani, Goan, North Indian  11am – 4pm, 7:30pm – 11:30pm (Mon-Sun)    Thane  Dombivali East    3.6   49 votes  1200\n",
       "1  CASUAL DINING,BAR          13198              Asian, Modern Indian, Japanese                    6pm – 11pm (Mon-Sun)  Chennai       Ramapuram    4.2   30 votes  1500\n",
       "2      CASUAL DINING          10915  North Indian, Chinese, Biryani, Hyderabadi     11am – 3:30pm, 7pm – 11pm (Mon-Sun)  Chennai      Saligramam    3.8  221 votes   800\n",
       "3        QUICK BITES           6346                            Tibetan, Chinese                 11:30am – 1am (Mon-Sun)   Mumbai     Bandra West    4.1   24 votes   800\n",
       "4     DESSERT PARLOR          15387                                    Desserts                    11am – 1am (Mon-Sun)   Mumbai     Lower Parel    3.8  165 votes   300"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4231, 8)"
      ]
     },
     "execution_count": 199,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_val = pd.read_excel('Data_Test.xlsx')\n",
    "df_val.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>TITLE</th>\n",
       "      <th>RESTAURANT_ID</th>\n",
       "      <th>CUISINES</th>\n",
       "      <th>TIME</th>\n",
       "      <th>CITY</th>\n",
       "      <th>LOCALITY</th>\n",
       "      <th>RATING</th>\n",
       "      <th>VOTES</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CASUAL DINING</td>\n",
       "      <td>4085</td>\n",
       "      <td>North Indian, Chinese, Mughlai, Kebab</td>\n",
       "      <td>12noon – 12midnight (Mon-Sun)</td>\n",
       "      <td>Noida</td>\n",
       "      <td>Sector 18</td>\n",
       "      <td>4.3</td>\n",
       "      <td>564 votes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>QUICK BITES</td>\n",
       "      <td>12680</td>\n",
       "      <td>South Indian, Fast Food, Pizza, North Indian</td>\n",
       "      <td>7am – 12:30AM (Mon-Sun)</td>\n",
       "      <td>Mumbai</td>\n",
       "      <td>Grant Road</td>\n",
       "      <td>4.2</td>\n",
       "      <td>61 votes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>CASUAL DINING</td>\n",
       "      <td>1411</td>\n",
       "      <td>North Indian, Seafood, Biryani, Chinese</td>\n",
       "      <td>11am – 11:30pm (Mon-Sun)</td>\n",
       "      <td>Mumbai</td>\n",
       "      <td>Marine Lines</td>\n",
       "      <td>3.8</td>\n",
       "      <td>350 votes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>None</td>\n",
       "      <td>204</td>\n",
       "      <td>Biryani</td>\n",
       "      <td>9am – 10pm (Mon, Wed, Thu, Fri, Sat, Sun), 10:...</td>\n",
       "      <td>Faridabad</td>\n",
       "      <td>NIT</td>\n",
       "      <td>3.8</td>\n",
       "      <td>1445 votes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>QUICK BITES</td>\n",
       "      <td>13453</td>\n",
       "      <td>South Indian, Kerala</td>\n",
       "      <td>11am – 10pm (Mon-Sun)</td>\n",
       "      <td>Kochi</td>\n",
       "      <td>Kaloor</td>\n",
       "      <td>3.6</td>\n",
       "      <td>23 votes</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           TITLE  RESTAURANT_ID                                      CUISINES                                               TIME       CITY      LOCALITY RATING       VOTES\n",
       "0  CASUAL DINING           4085         North Indian, Chinese, Mughlai, Kebab                      12noon – 12midnight (Mon-Sun)      Noida     Sector 18    4.3   564 votes\n",
       "1    QUICK BITES          12680  South Indian, Fast Food, Pizza, North Indian                            7am – 12:30AM (Mon-Sun)     Mumbai    Grant Road    4.2    61 votes\n",
       "2  CASUAL DINING           1411       North Indian, Seafood, Biryani, Chinese                           11am – 11:30pm (Mon-Sun)     Mumbai  Marine Lines    3.8   350 votes\n",
       "3           None            204                                       Biryani  9am – 10pm (Mon, Wed, Thu, Fri, Sat, Sun), 10:...  Faridabad           NIT    3.8  1445 votes\n",
       "4    QUICK BITES          13453                          South Indian, Kerala                              11am – 10pm (Mon-Sun)      Kochi        Kaloor    3.6    23 votes"
      ]
     },
     "execution_count": 200,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_val.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exploratory Data Analysis\n",
    "- I started with exploring value_counts() for each feature and checking how the costs are distributed across different values of each of these features. Later, I experimented with clubbing similar values together and checking how it affected performance of my ensemble tree-based algorithms. \n",
    "- I tried experimenting with TIME column and extracting important features such as opening time, closing time, closing days, etc. I probably underexplored this information (I'll really appreciate if you can suggest how I could have achieved the same results in a more efficient way or any other time-related features that I missed). \n",
    "- For values in CITY column which also contained locality, I copied such values to LOCALITY to and cleaned them to keep only relevant ones. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(16921, 8)"
      ]
     },
     "execution_count": 201,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = df_train['COST'].values\n",
    "df = pd.concat([df_train.drop(columns=['COST']), df_val])\n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>TITLE</th>\n",
       "      <th>RESTAURANT_ID</th>\n",
       "      <th>CUISINES</th>\n",
       "      <th>TIME</th>\n",
       "      <th>CITY</th>\n",
       "      <th>LOCALITY</th>\n",
       "      <th>RATING</th>\n",
       "      <th>VOTES</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CASUAL DINING</td>\n",
       "      <td>9438</td>\n",
       "      <td>Malwani, Goan, North Indian</td>\n",
       "      <td>11am – 4pm, 7:30pm – 11:30pm (Mon-Sun)</td>\n",
       "      <td>Thane</td>\n",
       "      <td>Dombivali East</td>\n",
       "      <td>3.6</td>\n",
       "      <td>49 votes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>CASUAL DINING,BAR</td>\n",
       "      <td>13198</td>\n",
       "      <td>Asian, Modern Indian, Japanese</td>\n",
       "      <td>6pm – 11pm (Mon-Sun)</td>\n",
       "      <td>Chennai</td>\n",
       "      <td>Ramapuram</td>\n",
       "      <td>4.2</td>\n",
       "      <td>30 votes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>CASUAL DINING</td>\n",
       "      <td>10915</td>\n",
       "      <td>North Indian, Chinese, Biryani, Hyderabadi</td>\n",
       "      <td>11am – 3:30pm, 7pm – 11pm (Mon-Sun)</td>\n",
       "      <td>Chennai</td>\n",
       "      <td>Saligramam</td>\n",
       "      <td>3.8</td>\n",
       "      <td>221 votes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>QUICK BITES</td>\n",
       "      <td>6346</td>\n",
       "      <td>Tibetan, Chinese</td>\n",
       "      <td>11:30am – 1am (Mon-Sun)</td>\n",
       "      <td>Mumbai</td>\n",
       "      <td>Bandra West</td>\n",
       "      <td>4.1</td>\n",
       "      <td>24 votes</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>DESSERT PARLOR</td>\n",
       "      <td>15387</td>\n",
       "      <td>Desserts</td>\n",
       "      <td>11am – 1am (Mon-Sun)</td>\n",
       "      <td>Mumbai</td>\n",
       "      <td>Lower Parel</td>\n",
       "      <td>3.8</td>\n",
       "      <td>165 votes</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               TITLE  RESTAURANT_ID                                    CUISINES                                    TIME     CITY        LOCALITY RATING      VOTES\n",
       "0      CASUAL DINING           9438                 Malwani, Goan, North Indian  11am – 4pm, 7:30pm – 11:30pm (Mon-Sun)    Thane  Dombivali East    3.6   49 votes\n",
       "1  CASUAL DINING,BAR          13198              Asian, Modern Indian, Japanese                    6pm – 11pm (Mon-Sun)  Chennai       Ramapuram    4.2   30 votes\n",
       "2      CASUAL DINING          10915  North Indian, Chinese, Biryani, Hyderabadi     11am – 3:30pm, 7pm – 11pm (Mon-Sun)  Chennai      Saligramam    3.8  221 votes\n",
       "3        QUICK BITES           6346                            Tibetan, Chinese                 11:30am – 1am (Mon-Sun)   Mumbai     Bandra West    4.1   24 votes\n",
       "4     DESSERT PARLOR          15387                                    Desserts                    11am – 1am (Mon-Sun)   Mumbai     Lower Parel    3.8  165 votes"
      ]
     },
     "execution_count": 202,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([1.464e+04, 0.000e+00, 6.880e+02, 0.000e+00, 1.550e+02, 0.000e+00,\n",
       "        4.700e+01, 0.000e+00, 0.000e+00, 2.100e+01, 0.000e+00, 1.600e+01,\n",
       "        0.000e+00, 5.000e+00, 0.000e+00, 2.000e+00]),\n",
       " array([1.    , 1.4375, 1.875 , 2.3125, 2.75  , 3.1875, 3.625 , 4.0625,\n",
       "        4.5   , 4.9375, 5.375 , 5.8125, 6.25  , 6.6875, 7.125 , 7.5625,\n",
       "        8.    ]),\n",
       " <a list of 16 Patch objects>)"
      ]
     },
     "execution_count": 203,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(df.RESTAURANT_ID.value_counts(), bins=16)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 204,
   "metadata": {},
   "outputs": [],
   "source": [
    "#checking restaurants which have multiple RESTAURANT_ID\n",
    "res_grouby = df.groupby(['RESTAURANT_ID'])['TIME'].size()\n",
    "res_list = res_grouby[res_grouby>3].sort_values(ascending=False).index.tolist()\n",
    "for res in res_list:\n",
    "    df[res] = 0\n",
    "    df.loc[df['RESTAURANT_ID']==res, res] = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "metadata": {},
   "outputs": [],
   "source": [
    "title_list = df['TITLE'].str.split(',')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({'CASUAL DINING': 5865,\n",
       "         'BAR': 900,\n",
       "         'QUICK BITES': 6144,\n",
       "         'DESSERT PARLOR': 795,\n",
       "         'CAFÉ': 1140,\n",
       "         'MICROBREWERY': 98,\n",
       "         'BEVERAGE SHOP': 331,\n",
       "         'IRANI CAFE': 5,\n",
       "         'BAKERY': 707,\n",
       "         'None': 1287,\n",
       "         'PUB': 189,\n",
       "         'FINE DINING': 468,\n",
       "         'SWEET SHOP': 218,\n",
       "         'LOUNGE': 263,\n",
       "         'FOOD COURT': 144,\n",
       "         'FOOD TRUCK': 39,\n",
       "         'MESS': 68,\n",
       "         'KIOSK': 80,\n",
       "         'CLUB': 39,\n",
       "         'CONFECTIONERY': 6,\n",
       "         'DHABA': 61,\n",
       "         'MEAT SHOP': 4,\n",
       "         'COCKTAIL BAR': 7,\n",
       "         'PAAN SHOP': 6,\n",
       "         'BHOJANALYA': 1})"
      ]
     },
     "execution_count": 206,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from collections import Counter\n",
    "title_counter = Counter(([a for b in title_list.tolist() for a in b]))\n",
    "title_counter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "BAKERY :  366.4454887218045\n",
      "SWEET SHOP :  288.7096774193548\n",
      "FOOD COURT :  423.8888888888889\n",
      "MICROBREWERY :  1672.5352112676057\n",
      "PUB :  1508.695652173913\n",
      "MESS :  255.28301886792454\n",
      "BHOJANALYA :  nan\n",
      "FINE DINING :  2908.7988826815645\n",
      "KIOSK :  225.83333333333334\n",
      "COCKTAIL BAR :  2550.0\n",
      "None :  415.55333998005983\n",
      "CASUAL DINING :  865.0671386161224\n",
      "QUICK BITES :  348.1128751631144\n",
      "MEAT SHOP :  483.3333333333333\n",
      "DHABA :  387.1111111111111\n",
      "FOOD TRUCK :  273.5483870967742\n",
      "PAAN SHOP :  120.0\n",
      "CONFECTIONERY :  360.0\n",
      "BAR :  1494.2572674418604\n",
      "LOUNGE :  1785.0746268656717\n",
      "IRANI CAFE :  1400.0\n",
      "CAFÉ :  707.1174377224199\n",
      "CLUB :  2303.5714285714284\n",
      "DESSERT PARLOR :  330.8766233766234\n",
      "BEVERAGE SHOP :  265.7429718875502\n"
     ]
    }
   ],
   "source": [
    "title_list_set = set([a for b in title_list.tolist() for a in b])\n",
    "for title in title_list_set:\n",
    "    print(title, \": \", df_train[df_train['TITLE'].str.contains(title)]['COST'].mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Merging similar titles to reduce title variations\n",
    "df['TITLE'] = df['TITLE'].str.replace('PUB','BAR')\n",
    "df['TITLE'] = df['TITLE'].str.replace('MICROBREWERY','BAR')\n",
    "df['TITLE'] = df['TITLE'].str.replace('IRANI CAFE','BAR')\n",
    "df['TITLE'] = df['TITLE'].str.replace('BHOJANALYA','MESS')\n",
    "df['TITLE'] = df['TITLE'].str.replace('CONFECTIONERY','BAKERY')\n",
    "df['TITLE'] = df['TITLE'].str.replace('DESSERT PARLOR','BAKERY')\n",
    "df['TITLE'] = df['TITLE'].str.replace('SWEET SHOP','BEVERAGE SHOP')\n",
    "df['TITLE'] = df['TITLE'].str.replace('FOOD COURT','QUICK BITES')\n",
    "df['TITLE'] = df['TITLE'].str.replace('KIOSK','MESS')\n",
    "df['TITLE'] = df['TITLE'].str.replace('CLUB','FINE DINING')\n",
    "df['TITLE'] = df['TITLE'].str.replace('COCKTAIL BAR','FINE DINING')\n",
    "df['TITLE'] = df['TITLE'].str.replace('DHABA','QUICK BITES')\n",
    "df['TITLE'] = df['TITLE'].str.replace('PAAN SHOP','None')\n",
    "df['TITLE'] = df['TITLE'].str.replace('MEAT SHOP','QUICK BITES')\n",
    "df['TITLE'] = df['TITLE'].str.replace('FOOD TRUCK','QUICK BITES')\n",
    "df['TITLE'] = df['TITLE'].str.replace('LOUNGE','BAR')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 209,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({'CASUAL DINING': 5865,\n",
       "         'BAR': 1455,\n",
       "         'QUICK BITES': 6392,\n",
       "         'BAKERY': 1508,\n",
       "         'CAFÉ': 1140,\n",
       "         'BEVERAGE SHOP': 549,\n",
       "         'None': 1293,\n",
       "         'FINE DINING': 514,\n",
       "         'MESS': 149})"
      ]
     },
     "execution_count": 209,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "title_list = df['TITLE'].str.split(',')\n",
    "title_counter = Counter(([a for b in title_list.tolist() for a in b]))\n",
    "title_counter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Creating one-hot encoding manually. Similar function is used to create one-hot encoded columns for \n",
    "# CUISINES, CITY and LOCALITY\n",
    "for title in title_counter.keys():\n",
    "    df[title] = 0\n",
    "    df.loc[df['TITLE'].str.contains(title), title] = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 211,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['CUISINES'] = df['CUISINES'].str.lower()\n",
    "df['CUISINES'] = df['CUISINES'].str.replace(' ','')\n",
    "dftemp = df[:ntrain]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 212,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({'malwani': 74,\n",
       "         'goan': 42,\n",
       "         'northindian': 7222,\n",
       "         'asian': 600,\n",
       "         'modernindian': 87,\n",
       "         'japanese': 190,\n",
       "         'chinese': 5849,\n",
       "         'biryani': 1683,\n",
       "         'hyderabadi': 180,\n",
       "         'tibetan': 65,\n",
       "         'desserts': 1507,\n",
       "         'seafood': 768,\n",
       "         'cafe': 1115,\n",
       "         'pizza': 700,\n",
       "         'burger': 493,\n",
       "         'barfood': 45,\n",
       "         'southindian': 3034,\n",
       "         'fastfood': 2866,\n",
       "         'beverages': 1286,\n",
       "         'arabian': 534,\n",
       "         'mughlai': 1029,\n",
       "         'maharashtrian': 95,\n",
       "         'parsi': 28,\n",
       "         'thai': 427,\n",
       "         'bakery': 874,\n",
       "         'momos': 493,\n",
       "         'continental': 2095,\n",
       "         'european': 326,\n",
       "         'rolls': 348,\n",
       "         'andhra': 327,\n",
       "         'italian': 1536,\n",
       "         'bbq': 215,\n",
       "         'fingerfood': 374,\n",
       "         'tea': 79,\n",
       "         'american': 388,\n",
       "         'healthyfood': 290,\n",
       "         'coffee': 63,\n",
       "         'indonesian': 23,\n",
       "         'korean': 46,\n",
       "         'nepalese': 18,\n",
       "         'icecream': 464,\n",
       "         'mexican': 345,\n",
       "         'kerala': 721,\n",
       "         'indian': 56,\n",
       "         'mithai': 257,\n",
       "         'streetfood': 881,\n",
       "         'malaysian': 50,\n",
       "         'vietnamese': 40,\n",
       "         'iranian': 15,\n",
       "         'kebab': 309,\n",
       "         'juices': 325,\n",
       "         'sandwich': 323,\n",
       "         'mediterranean': 202,\n",
       "         'salad': 338,\n",
       "         'gujarati': 51,\n",
       "         'rajasthani': 59,\n",
       "         'tex-mex': 23,\n",
       "         'roastchicken': 7,\n",
       "         'burmese': 32,\n",
       "         'chettinad': 162,\n",
       "         'northeastern': 21,\n",
       "         'lebanese': 205,\n",
       "         'coffeeandtea': 2,\n",
       "         'grill': 16,\n",
       "         '': 139,\n",
       "         'bihari': 15,\n",
       "         'bengali': 113,\n",
       "         'lucknowi': 23,\n",
       "         'awadhi': 23,\n",
       "         'steak': 57,\n",
       "         'french': 35,\n",
       "         'portuguese': 8,\n",
       "         'wraps': 41,\n",
       "         'srilankan': 11,\n",
       "         'oriya': 22,\n",
       "         'ethiopian': 1,\n",
       "         'konkan': 28,\n",
       "         'sushi': 76,\n",
       "         'spanish': 23,\n",
       "         'russian': 2,\n",
       "         'mangalorean': 77,\n",
       "         'turkish': 25,\n",
       "         'bubbletea': 12,\n",
       "         'afghan': 27,\n",
       "         'naga': 8,\n",
       "         'singaporean': 16,\n",
       "         'german': 5,\n",
       "         'middleeastern': 33,\n",
       "         'sindhi': 5,\n",
       "         'cantonese': 4,\n",
       "         'hotpot': 1,\n",
       "         'panasian': 2,\n",
       "         'satay': 1,\n",
       "         'dumplings': 1,\n",
       "         'kashmiri': 10,\n",
       "         'rawmeats': 4,\n",
       "         'drinksonly': 8,\n",
       "         'moroccan': 4,\n",
       "         'panini': 4,\n",
       "         'cafefood': 6,\n",
       "         'charcoalchicken': 10,\n",
       "         'belgian': 2,\n",
       "         'mongolian': 4,\n",
       "         'tamil': 5,\n",
       "         'african': 3,\n",
       "         'paan': 6,\n",
       "         'assamese': 3,\n",
       "         'hotdogs': 1,\n",
       "         'poké': 6,\n",
       "         'british': 8,\n",
       "         'bohri': 3,\n",
       "         'fusion': 2,\n",
       "         'armenian': 1,\n",
       "         'southamerican': 5,\n",
       "         'greek': 8,\n",
       "         'pakistani': 4,\n",
       "         'peruvian': 2,\n",
       "         'cuisinevaries': 2,\n",
       "         'irish': 1,\n",
       "         'multicuisine': 1,\n",
       "         'jewish': 1,\n",
       "         'vegan': 2,\n",
       "         'oriental': 2,\n",
       "         'modernaustralian': 1,\n",
       "         'egyptian': 2,\n",
       "         'fishandchips': 1,\n",
       "         'brazilian': 1,\n",
       "         'mishti': 1,\n",
       "         'falafel': 1,\n",
       "         'hawaiian': 1})"
      ]
     },
     "execution_count": 212,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cuisines_list = df['CUISINES'].str.split(',')\n",
    "cuisines_counter = Counter(([a for b in cuisines_list.tolist() for a in b]))\n",
    "cuisines_counter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " :  655.2522458628841\n",
      "mediterranean :  1721.8954248366013\n",
      "asian :  1460.972850678733\n",
      "panini :  450.0\n",
      "bengali :  632.7380952380952\n",
      "lebanese :  734.1935483870968\n",
      "mangalorean :  892.96875\n",
      "bihari :  419.2307692307692\n",
      "peruvian :  2850.0\n",
      "hotpot :  700.0\n",
      "northindian :  745.8497120564741\n",
      "burmese :  962.0\n",
      "pizza :  725.1953125\n",
      "oriental :  3000.0\n",
      "pakistani :  1500.0\n",
      "british :  1150.0\n",
      "beverages :  455.5739400206825\n",
      "coffeeandtea :  425.0\n",
      "paan :  120.0\n",
      "belgian :  1050.0\n",
      "icecream :  306.1624649859944\n",
      "mughlai :  783.8239159001314\n",
      "mongolian :  900.0\n",
      "northeastern :  738.2352941176471\n",
      "fishandchips :  nan\n",
      "african :  900.0\n",
      "sandwich :  435.02024291497975\n",
      "spanish :  1865.7894736842106\n",
      "hawaiian :  nan\n",
      "gujarati :  812.7906976744187\n",
      "russian :  1200.0\n",
      "indian :  694.0690603514133\n",
      "afghan :  691.6666666666666\n",
      "jewish :  700.0\n",
      "wraps :  496.875\n",
      "portuguese :  1333.3333333333333\n",
      "modernindian :  1630.4347826086957\n",
      "dumplings :  950.0\n",
      "bohri :  466.6666666666667\n",
      "southamerican :  1650.0\n",
      "bbq :  908.2857142857143\n",
      "german :  1700.0\n",
      "korean :  1476.388888888889\n",
      "modernaustralian :  2200.0\n",
      "chinese :  689.6014194139194\n",
      "bakery :  373.8610687022901\n",
      "tex-mex :  1330.952380952381\n",
      "tibetan :  520.5882352941177\n",
      "maharashtrian :  603.125\n",
      "chettinad :  610.4477611940298\n",
      "assamese :  550.0\n",
      "satay :  950.0\n",
      "irish :  2500.0\n",
      "nepalese :  653.8461538461538\n",
      "singaporean :  1230.7692307692307\n",
      "cantonese :  2733.3333333333335\n",
      "sindhi :  800.0\n",
      "fastfood :  416.1103253182461\n",
      "rawmeats :  583.3333333333334\n",
      "sushi :  1696.3636363636363\n",
      "grill :  650.0\n",
      "lucknowi :  1509.375\n",
      "iranian :  745.0\n",
      "vietnamese :  1670.6896551724137\n",
      "italian :  1179.7379912663755\n",
      "barfood :  1835.2941176470588\n",
      "juices :  385.531914893617\n",
      "mithai :  298.41269841269843\n",
      "rolls :  400.32\n",
      "desserts :  467.2504363001745\n",
      "falafel :  nan\n",
      "vegan :  700.0\n",
      "egyptian :  3000.0\n",
      "rajasthani :  783.3333333333334\n",
      "poké :  1200.0\n",
      "cafe :  704.311377245509\n",
      "tamil :  425.0\n",
      "oriya :  377.5\n",
      "armenian :  2000.0\n",
      "brazilian :  nan\n",
      "salad :  1108.6\n",
      "bubbletea :  428.57142857142856\n",
      "fingerfood :  1594.043321299639\n",
      "goan :  1098.4848484848485\n",
      "srilankan :  915.0\n",
      "european :  1736.6795366795366\n",
      "mexican :  1049.8031496062993\n",
      "andhra :  657.421875\n",
      "konkan :  935.7142857142857\n",
      "biryani :  522.0396825396825\n",
      "japanese :  1887.769784172662\n",
      "american :  1086.282894736842\n",
      "arabian :  476.8939393939394\n",
      "french :  1295.2380952380952\n",
      "moroccan :  2733.3333333333335\n",
      "continental :  1203.345489443378\n",
      "thai :  888.8998035363458\n",
      "roastchicken :  387.5\n",
      "mishti :  nan\n",
      "fusion :  300.0\n",
      "middleeastern :  941.6666666666666\n",
      "malaysian :  1282.9268292682927\n",
      "multicuisine :  600.0\n",
      "streetfood :  327.6772247360483\n",
      "ethiopian :  900.0\n",
      "kerala :  494.9126213592233\n",
      "hotdogs :  500.0\n",
      "parsi :  892.1052631578947\n",
      "seafood :  938.5544217687075\n",
      "burger :  632.4175824175824\n",
      "greek :  1650.0\n",
      "coffee :  604.4444444444445\n",
      "momos :  645.0391644908616\n",
      "steak :  961.6279069767442\n",
      "naga :  664.2857142857143\n",
      "kebab :  754.5064377682403\n",
      "tea :  647.7477477477478\n",
      "indonesian :  1277.7777777777778\n",
      "kashmiri :  1750.0\n",
      "drinksonly :  1880.0\n",
      "charcoalchicken :  422.22222222222223\n",
      "awadhi :  1265.7894736842106\n",
      "panasian :  1075.0\n",
      "turkish :  734.2105263157895\n",
      "malwani :  733.0188679245283\n",
      "healthyfood :  684.7488584474886\n",
      "cuisinevaries :  650.0\n",
      "cafefood :  680.0\n",
      "hyderabadi :  848.5714285714286\n",
      "southindian :  516.9846086191733\n"
     ]
    }
   ],
   "source": [
    "cuisines_list_set = set([a for b in cuisines_list.tolist() for a in b])\n",
    "for cuisine in cuisines_list_set:\n",
    "    print(cuisine, \": \", df_train[dftemp['CUISINES'].str.contains(cuisine)]['COST'].mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Merging similar cuisines to reduce variations\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('bihari','regional_400') #450\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('bohri','regional_400')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('tamil','regional_400')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('oriya','regional_400')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('kerala','regional_400')\n",
    "\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('panini','sandwich') #450\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('charcoalchicken','sandwich')\n",
    "\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('bengali','regional_650') #650\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('chettinad','regional_650')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('maharashtrian','regional_650')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('nepalese','regional_650')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('andhra','regional_650')\n",
    "\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('hotpot','regional_650') #700\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('pizza','regional_650')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('chinese','regional_650')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('vegan','regional_650')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('cafe','regional_650')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('cafefood','regional_650')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('healthyfood','')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('lebanese','kebab') #750\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('turkish','kebab')\n",
    "\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('mangalorean','seafood') #900\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('konkan','seafood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('thai','seafood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('parsi','seafood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('srilankan','seafood')\n",
    " \n",
    "df['CUISINES'] = df['CUISINES'].str.replace('korean','asian') #1450\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('singaporean','asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('sushi','asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('vietnamese','asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('malaysian','asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('indonesian','asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('modernindian','asian')\n",
    "\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('mediterranean','european') #1750\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('spanish','european') \n",
    "df['CUISINES'] = df['CUISINES'].str.replace('barfood','european') \n",
    "df['CUISINES'] = df['CUISINES'].str.replace('fingerfood','european') \n",
    "df['CUISINES'] = df['CUISINES'].str.replace('japanese','european')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('greek','european')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('drinksonly','european')\n",
    "\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('peruvian','european') #2700\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('cantonese','european') \n",
    "df['CUISINES'] = df['CUISINES'].str.replace('egyptian','european')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('moroccan','european')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('irish','european')\n",
    "\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Malwani','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('BubbleTea','Desserts')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('CoffeeandTea','Beverages')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Hyderabadi','Biryani')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Goan','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Thai','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Japanese','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('BarFood','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Juices','Beverages')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Bakery','Desserts')\n",
    "#df['CUISINES'] = df['CUISINES'].str.replace('Continental,','Continental')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Tibetan','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('ModernIndian','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Pizza','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Burger','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Maharashtrian','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Parsi','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Thai','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Momos','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Rolls','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Italian','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Andhra','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('BBQ','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('FingerFood','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Tea','Beverages')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('American','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('HealthyFood','Salad')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Coffee','Beverages')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Indonesian','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Korean','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Nepalese','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Mexican','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('IceCream','Desserts')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Kerala','Regional')\n",
    "#df['CUISINES'] = df['CUISINES'].str.replace('Indian','North Indian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Mithai','Desserts')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('StreetFood','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Malaysian','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Vietnamese','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Arabian','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Iranian','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Kebab','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Sandwich','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Mediterranean','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Gujarati','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Rajasthani','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Tex-Mex','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('RoastChicken','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Chettinad','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('NorthEastern','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Lebanese','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Grill','European')\n",
    "#df['CUISINES'] = df['CUISINES'].str.replace('Biryani,','Biryani')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Bihari','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Bengali','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Lucknowi','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Awadhi','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Steak','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('French','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Portuguese','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Wraps','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('SriLankan','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Oriya','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Ethiopian','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Konkan','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Sushi','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Spanish','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Russian','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Mangalorean','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Turkish','European')\n",
    "#df['CUISINES'] = df['CUISINES'].str.replace(',','North Indian')\n",
    "#df['CUISINES'] = df['CUISINES'].str.replace('European,','European')\n",
    "#df['CUISINES'] = df['CUISINES'].str.replace('Salad,','Salad')\n",
    "#df['CUISINES'] = df['CUISINES'].str.replace('Healthy Food,','Salad')\n",
    "#df['CUISINES'] = df['CUISINES'].str.replace('Desserts,','Desserts')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Naga','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Singaporean','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('German','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('MiddleEastern','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Sindhi','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Cantonese','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('HotPot','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Kashmiri','Regional')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('British','European')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 215,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['CUISINES'] = df['CUISINES'].str.replace('PanAsian','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Satay','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Dumplings','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('RawMeats','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('DrinksOnly','Beverages')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('CafeFood','Cafe')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Hotdogs','FastFood')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Burmese','Asian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Afghan','European')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('SouthEuropean','European')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 216,
   "metadata": {},
   "outputs": [],
   "source": [
    "regional_replace = ['Tamil','Assamese','Bohri','Mishti']\n",
    "for cuisine in regional_replace:\n",
    "    df['CUISINES'] = df['CUISINES'].str.replace(cuisine,'Regional')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 217,
   "metadata": {},
   "outputs": [],
   "source": [
    "cuisine_df = pd.DataFrame.from_dict(cuisines_counter, orient='index').reset_index()\n",
    "cuisine_df.columns = ['cuisine','counts']\n",
    "european_replace = list(cuisine_df[cuisine_df.counts<=10]['cuisine'])\n",
    "for cuisine in european_replace:\n",
    "    df['CUISINES'] = df['CUISINES'].str.replace(cuisine,'European')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 218,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['CUISINES'] = df['CUISINES'].str.replace('NorthIndian','Northindian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('SouthIndian','Southindian')\n",
    "df['CUISINES'] = df['CUISINES'].str.replace('Indian','Northindian')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({'malwani': 74,\n",
       "         'goan': 42,\n",
       "         'northindian': 7222,\n",
       "         'asian': 600,\n",
       "         'modernindian': 87,\n",
       "         'japanese': 190,\n",
       "         'chinese': 5849,\n",
       "         'biryani': 1683,\n",
       "         'hyderabadi': 180,\n",
       "         'tibetan': 65,\n",
       "         'desserts': 1507,\n",
       "         'seafood': 768,\n",
       "         'cafe': 1115,\n",
       "         'pizza': 700,\n",
       "         'burger': 493,\n",
       "         'barfood': 45,\n",
       "         'southindian': 3034,\n",
       "         'fastfood': 2866,\n",
       "         'beverages': 1286,\n",
       "         'arabian': 534,\n",
       "         'mughlai': 1029,\n",
       "         'maharashtrian': 95,\n",
       "         'parsi': 28,\n",
       "         'thai': 427,\n",
       "         'bakery': 874,\n",
       "         'momos': 493,\n",
       "         'continental': 2095,\n",
       "         'european': 326,\n",
       "         'rolls': 348,\n",
       "         'andhra': 327,\n",
       "         'italian': 1536,\n",
       "         'bbq': 215,\n",
       "         'fingerfood': 374,\n",
       "         'tea': 79,\n",
       "         'american': 388,\n",
       "         'healthyfood': 290,\n",
       "         'coffee': 63,\n",
       "         'indonesian': 23,\n",
       "         'korean': 46,\n",
       "         'nepalese': 18,\n",
       "         'icecream': 464,\n",
       "         'mexican': 345,\n",
       "         'kerala': 721,\n",
       "         'indian': 56,\n",
       "         'mithai': 257,\n",
       "         'streetfood': 881,\n",
       "         'malaysian': 50,\n",
       "         'vietnamese': 40,\n",
       "         'iranian': 15,\n",
       "         'kebab': 309,\n",
       "         'juices': 325,\n",
       "         'sandwich': 323,\n",
       "         'mediterranean': 202,\n",
       "         'salad': 338,\n",
       "         'gujarati': 51,\n",
       "         'rajasthani': 59,\n",
       "         'tex-mex': 23,\n",
       "         'European': 173,\n",
       "         'burmese': 32,\n",
       "         'chettinad': 162,\n",
       "         'northeastern': 21,\n",
       "         'lebanese': 205,\n",
       "         'grill': 16,\n",
       "         'bihari': 15,\n",
       "         'bengali': 113,\n",
       "         'lucknowi': 23,\n",
       "         'awadhi': 23,\n",
       "         'steak': 57,\n",
       "         'french': 35,\n",
       "         'wraps': 41,\n",
       "         'srilankan': 11,\n",
       "         'oriya': 22,\n",
       "         'konkan': 28,\n",
       "         'sushi': 76,\n",
       "         'spanish': 23,\n",
       "         'mangalorean': 77,\n",
       "         'turkish': 25,\n",
       "         'bubbletea': 12,\n",
       "         'afghan': 27,\n",
       "         'singaporean': 16,\n",
       "         'middleeastern': 33})"
      ]
     },
     "execution_count": 219,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cuisines_list = df['CUISINES'].str.split(',')\n",
    "cuisines_counter = Counter(([a for b in cuisines_list.tolist() for a in b]))\n",
    "del cuisines_counter['']\n",
    "cuisines_counter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 220,
   "metadata": {},
   "outputs": [],
   "source": [
    "for cuisine in cuisines_counter.keys():\n",
    "    df[cuisine] = 0\n",
    "    df.loc[df['CUISINES'].str.contains(cuisine), cuisine] = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 221,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.TIME = df.TIME.str.lower()\n",
    "df.TIME = df.TIME.str.replace(\" \",\"\")\n",
    "df.TIME = df.TIME.str.replace(\"–\",'-')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 222,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['all_days'] = 0\n",
    "df.loc[df.TIME.str.contains(r'(\\(mon\\-sun\\))'),'all_days'] = 1\n",
    "df.TIME = df.TIME.str.replace(\"\\(mon-sun\\)\",\"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 223,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['closed_weekend'] = 0\n",
    "df.loc[df.TIME.str.contains(\"closed\\(sun\\)\"),\"closed_weekend\"] = 1\n",
    "df.loc[df.TIME.str.contains(\"closed\\(sat\\)\"),\"closed_weekend\"] = 1\n",
    "df.TIME = df.TIME.str.replace(\"closed\\(sun\\)\",\"\")\n",
    "df.TIME = df.TIME.str.replace(\"closed\\(sat\\)\",\"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 224,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['closed_weekday'] = 0\n",
    "df.loc[df.TIME.str.contains(\"closed\\(mon\\)\"),\"closed_weekday\"] = 1\n",
    "df.loc[df.TIME.str.contains(\"closed\\(tue\\)\"),\"closed_weekday\"] = 1\n",
    "df.loc[df.TIME.str.contains(\"closed\\(wed\\)\"),\"closed_weekday\"] = 1\n",
    "df.TIME = df.TIME.str.replace(\"closed\\(mon\\)\",\"\")\n",
    "df.TIME = df.TIME.str.replace(\"closed\\(tue\\)\",\"\")\n",
    "df.TIME = df.TIME.str.replace(\"closed\\(wed\\)\",\"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "metadata": {},
   "outputs": [],
   "source": [
    "#df.TIME = df.TIME.str.replace(\",\",' ')\n",
    "df.TIME = df.TIME.str.replace(\"(\",' ')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.TIME = df.TIME.str.strip()\n",
    "df.TIME = df.TIME.str.split(\" \").str.get(0).str.lstrip(',')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 227,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.TIME = df.TIME.str.replace(\"-\",\" \")\n",
    "df.TIME = df.TIME.str.replace(\",\",\" \")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 228,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.TIME = df.TIME.str.replace(\"12noon\",\"12:01\")\n",
    "df.TIME = df.TIME.str.replace(\"12midnight\",\"00:01\")\n",
    "df.TIME[df.TIME.str.contains(\"24hours\")] = \"00:01 23:59\"\n",
    "df.TIME[df.TIME.str.contains(\"notavailable\")] = \"11am 11pm\"\n",
    "df.TIME[df.TIME.str.contains(\"mon\")] = \"11am 11pm\"\n",
    "df.TIME[df.TIME.str.contains(\"closed\")] = \"9am 9am\"\n",
    "df.TIME = df.TIME.str.replace(\".\",\"\")\n",
    "df.TIME[df.TIME == \"\"] = \"11am 11pm\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 229,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "from dateutil.parser import parse\n",
    "a = df.TIME.str.split(' ', expand=True)\n",
    "a.columns = [\"1\",\"2\",\"3\",\"4\",\"5\",\"6\"]\n",
    "a['1'] = a['1'].apply(lambda x: parse(x))\n",
    "a['2'] = a['2'].apply(lambda x: parse(x))\n",
    "a['3'] = a['3'].apply(lambda x: parse(x) if x is not None else x)\n",
    "a['4'][a['4']==\"\"] = None\n",
    "a['6'][a['6']==\"\"] = None\n",
    "a['4'] = a['4'].apply(lambda x: parse(x) if x is not None else x)\n",
    "a['5'] = a['5'].apply(lambda x: parse(x) if x is not None else x)\n",
    "a['6'] = a['6'].apply(lambda x: parse(x) if x is not None else x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 230,
   "metadata": {},
   "outputs": [],
   "source": [
    "a['2'] = a.apply(lambda row: row['2']+datetime.timedelta(days=1) if (row['2']-row['1']) < datetime.timedelta(minutes=1) else row['2'], axis=1)\n",
    "a['3'] = a.apply(lambda row: row['3']+datetime.timedelta(days=1) if (row['3']-row['1']) < datetime.timedelta(minutes=1) else row['3'], axis=1)\n",
    "a['4'] = a.apply(lambda row: row['4']+datetime.timedelta(days=1) if (row['3']-row['1']) < datetime.timedelta(minutes=1) else row['4'], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "metadata": {},
   "outputs": [],
   "source": [
    "a['2-1'] = a['2']-a['1']\n",
    "a['4-3'] = a['4']-a['3']\n",
    "a['6-5'] = a['6']-a['5']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 232,
   "metadata": {},
   "outputs": [],
   "source": [
    "a['4-3'].fillna(0, inplace=True)\n",
    "a['6-5'].fillna(0, inplace=True)\n",
    "a['duration'] = a['2-1']+a['4-3']+a['6-5']\n",
    "a['closing_time'] = a[[\"2\",\"4\",\"6\"]].max(axis=1).dt.time\n",
    "a['opening_time'] = a['1'].dt.time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "metadata": {},
   "outputs": [],
   "source": [
    "a['late_night'] = 0\n",
    "a.loc[(a.closing_time>=datetime.time(23,45,0)) | ((a.closing_time>datetime.time(0,0,0)) & (a.closing_time<=datetime.time(5,0,0))), 'late_night'] = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 234,
   "metadata": {},
   "outputs": [],
   "source": [
    "a['breakfast'] = 0\n",
    "a.loc[((a.opening_time>datetime.time(6,0,0)) & (a.opening_time<datetime.time(11,0,0))), 'breakfast'] = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 235,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['breakfast'] = a['breakfast']\n",
    "df['late_night'] = a['late_night']\n",
    "df['duration'] = a['duration'].dt.seconds/60"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 236,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['CITY'] = df['CITY'].str.lower()\n",
    "df['CITY'][df['CITY'].isnull()] = \"None\"\n",
    "df['CITY'][df['CITY'] == 'navi mumbai'] = 'nm'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 237,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['chennai',\n",
       " 'bangalore',\n",
       " 'hyderabad',\n",
       " 'mumbai',\n",
       " 'kochi',\n",
       " 'new delhi',\n",
       " 'gurgaon',\n",
       " 'secunderabad',\n",
       " 'noida']"
      ]
     },
     "execution_count": 237,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "city_list = df['CITY'].value_counts().index[:9].tolist()\n",
    "for city in city_list:\n",
    "    df.CITY[df.CITY.str.contains(city)] = city\n",
    "    \n",
    "city_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 238,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['CITY'][df['CITY'] == 'india'] = 'None'\n",
    "df['CITY'][df['CITY'].str.contains('thane')] = 'mumbai'\n",
    "df['CITY'][df['CITY'].str.contains('bandra')] = 'mumbai'\n",
    "df['CITY'][df['CITY'].str.contains('andheri')] = 'mumbai'\n",
    "df['CITY'][df['CITY'].str.contains('bengaluru')] = 'bangalore'\n",
    "df['CITY'][df['CITY'].str.contains('kakkanad')] = 'kochi'\n",
    "df['CITY'][df['CITY'].str.contains('ernakulam')] = 'kochi'\n",
    "df['CITY'][df['CITY'].str.contains('madhapur')] = 'kochi'\n",
    "df['CITY'][df['CITY'].str.contains('edappally')] = 'kochi'\n",
    "df['CITY'][df['CITY'].str.contains('kaloor')] = 'kochi'\n",
    "df['CITY'][df['CITY'] == 'kerala'] = 'kochi'\n",
    "df['CITY'][df['CITY'] == 'telangana'] = 'hyderabad'\n",
    "df['CITY'][df['CITY'] == 'jubilee hills'] = 'hyderabad'\n",
    "df['CITY'][df['CITY'] == 'gurugram'] = 'gurgaon'\n",
    "df['CITY'][df['CITY'] == 'banglore'] = 'bangalore'\n",
    "df['CITY'][df['CITY'] == 'bengalore'] = 'bangalore'\n",
    "df['CITY'][df['CITY'] == 'dwarka'] = 'new delhi'\n",
    "df.loc[df['CITY']=='delhi ncr',\"CITY\"] = \"new delhi\" \n",
    "df['CITY'][df['CITY'] == 'dwarka'] = 'new delhi'\n",
    "df['CITY'][df['CITY'] == 'delhi'] = 'new delhi'\n",
    "df['CITY'][df['CITY'] == 'maharashtra'] = 'mumbai'\n",
    "df['CITY'][df['CITY'] == 'tamil nadu'] = 'chennai'\n",
    "\n",
    "df.loc[df[\"CITY\"].isin(df['CITY'].value_counts()[df['CITY'].value_counts()<=5].index.tolist()),\"CITY\"] = \"None\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 239,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "bangalore       2933\n",
       "chennai         2902\n",
       "mumbai          2702\n",
       "hyderabad       2494\n",
       "kochi           1849\n",
       "new delhi       1805\n",
       "gurgaon          535\n",
       "None             520\n",
       "secunderabad     401\n",
       "noida            316\n",
       "nm               223\n",
       "ghaziabad        132\n",
       "faridabad        109\n",
       "Name: CITY, dtype: int64"
      ]
     },
     "execution_count": 239,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['CITY'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 240,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['LOCALITY'] = df['LOCALITY'].str.lower()\n",
    "df['LOCALITY'][df['LOCALITY'].isnull()] = \"none\"\n",
    "df['LOCALITY'] = df['LOCALITY'].str.replace('.','')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 241,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['LOCALITY'] = df['LOCALITY'].str.replace(' west','')\n",
    "df['LOCALITY'] = df['LOCALITY'].str.replace(' east','')\n",
    "#df['LOCALITY'] = df['LOCALITY'].str.replace(' phase','')\n",
    "#df['LOCALITY'] = df['LOCALITY'].str.replace(' hills','')\n",
    "#df['LOCALITY'] = df['LOCALITY'].str.replace(' city','')\n",
    "#df['LOCALITY'] = df['LOCALITY'].str.replace(' road','')\n",
    "#df['LOCALITY'] = df['LOCALITY'].str.replace(' nagar','')\n",
    "#df['LOCALITY'] = df['LOCALITY'].str.replace(' park','')\n",
    "#df['LOCALITY'] = df['LOCALITY'].str.replace(' block','')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 242,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['LOCALITY'][df['LOCALITY'] == 'koramangala 5th block'] = 'koramangala'\n",
    "df['LOCALITY'][df['LOCALITY'].str.contains('greater kailash')] = 'greater kailash'\n",
    "df['LOCALITY'][df['LOCALITY'] == 'fort'] = 'fort kochi'\n",
    "df['LOCALITY'][df['LOCALITY'] == 'nit'] = 'nit university'\n",
    "df['LOCALITY'][df['LOCALITY'] == 'kochi'] = 'fort kochi'\n",
    "df['LOCALITY'][df['LOCALITY'] == 'koti'] = 'kotikoti'\n",
    "df['LOCALITY'][df['LOCALITY'] == 'parel'] = 'parelparel'\n",
    "df['LOCALITY'] = df['LOCALITY'].str.replace(' ','')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "metadata": {},
   "outputs": [],
   "source": [
    "locality_list = df['LOCALITY'].value_counts()[df['LOCALITY'].value_counts()>=80].index.tolist()\n",
    "for locality in locality_list:\n",
    "    df['LOCALITY'][df['LOCALITY'].str.contains(locality)] = locality"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 244,
   "metadata": {},
   "outputs": [],
   "source": [
    "for locality in locality_list:\n",
    "    df[locality] = 0\n",
    "    df.loc[df['LOCALITY']==locality, locality] = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 245,
   "metadata": {},
   "outputs": [],
   "source": [
    "for locality in df['LOCALITY'].value_counts()[df['LOCALITY'].value_counts()<6].index.tolist():\n",
    "    df.LOCALITY[df.LOCALITY==locality] = \"none\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 246,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "none                         1489\n",
       "koramangala                   268\n",
       "tnagar                        247\n",
       "fortkochi                     228\n",
       "gachibowli                    220\n",
       "indiranagar                   189\n",
       "annanagar                     184\n",
       "andheri                       183\n",
       "kakkanad                      180\n",
       "kukatpally                    174\n",
       "madhapur                      174\n",
       "whitefield                    166\n",
       "hsr                           164\n",
       "edappally                     161\n",
       "banjarahills                  160\n",
       "marathahalli                  150\n",
       "jubileehills                  147\n",
       "btm                           147\n",
       "mgroad                        140\n",
       "nungambakkam                  133\n",
       "bandra                        131\n",
       "jayanagar                     127\n",
       "kaloor                        126\n",
       "borivali                      123\n",
       "kondapur                      116\n",
       "electroniccity                108\n",
       "jpnagar                       108\n",
       "connaughtplace                104\n",
       "velachery                     104\n",
       "thane                         103\n",
       "malad                          98\n",
       "kandivali                      90\n",
       "miraroad                       90\n",
       "goregaon                       89\n",
       "hitechcity                     87\n",
       "marinedrive                    85\n",
       "lowerparel                     82\n",
       "vileparle                      79\n",
       "greaterkailash                 78\n",
       "vyttila                        78\n",
       "powai                          74\n",
       "palarivattom                   73\n",
       "adyar                          73\n",
       "alwarpet                       72\n",
       "rohini                         69\n",
       "chembur                        69\n",
       "mulund                         69\n",
       "juhu                           66\n",
       "mylapore                       64\n",
       "perungudi                      63\n",
       "kilpauk                        62\n",
       "indirapuram                    59\n",
       "pallimukku                     59\n",
       "porur                          59\n",
       "panampillynagar                59\n",
       "malleshwaram                   56\n",
       "egmore                         56\n",
       "bannerghattaroad               56\n",
       "manikonda                      55\n",
       "kalyannagar                    55\n",
       "begumpet                       55\n",
       "bellandur                      55\n",
       "himayathnagar                  54\n",
       "ramapuram                      54\n",
       "thuraipakkam                   53\n",
       "ameerpet                       53\n",
       "colaba                         53\n",
       "sarjapurroad                   53\n",
       "newbelroad                     53\n",
       "navallur                       53\n",
       "kacheripady                    52\n",
       "sainikpuri                     52\n",
       "vashi                          52\n",
       "ghatkopar                      51\n",
       "uppal                          51\n",
       "dilsukhnagar                   51\n",
       "mogappair                      50\n",
       "aluva                          50\n",
       "royapettah                     50\n",
       "khar                           48\n",
       "dlfphase4                      47\n",
       "vijaynagar                     47\n",
       "kadavanthra                    46\n",
       "ambattur                       46\n",
       "dlfphase3                      46\n",
       "elamkulam                      46\n",
       "chakala                        46\n",
       "brookefield                    46\n",
       "mattancherry                   46\n",
       "banashankari                   45\n",
       "sector29                       45\n",
       "lingampally                    45\n",
       "delhiuniversity-gtbnagar       44\n",
       "medavakkam                     44\n",
       "tolichowki                     43\n",
       "kalamassery                    43\n",
       "dwarka                         43\n",
       "sholinganallur                 42\n",
       "marad                          42\n",
       "kodambakkam                    42\n",
       "vadapalani                     42\n",
       "golfcourseroad                 42\n",
       "abids                          42\n",
       "marol                          41\n",
       "dombivali                      41\n",
       "gstroad                        41\n",
       "potheri                        41\n",
       "tripunithura                   41\n",
       "vasai                          40\n",
       "rajourigarden                  39\n",
       "janakpuri                      39\n",
       "sector18                       39\n",
       "rajarajeshwarinagar            39\n",
       "santacruz                      39\n",
       "sector50                       38\n",
       "chromepet                      38\n",
       "ashoknagar                     38\n",
       "mehdipatnam                    37\n",
       "punjabibagh                    37\n",
       "nedumbassery                   37\n",
       "kharghar                       37\n",
       "basavanagudi                   37\n",
       "thopumpady                     37\n",
       "dlfcybercity                   37\n",
       "kothapet                       36\n",
       "pitampura                      36\n",
       "teynampet                      36\n",
       "miyapur                        36\n",
       "jalahalli                      36\n",
       "tambaram                       36\n",
       "uttamnagar                     36\n",
       "rajajinagar                    36\n",
       "srnagar                        35\n",
       "thevera                        35\n",
       "malviyanagar                   34\n",
       "saket                          34\n",
       "frazertown                     34\n",
       "ernakulam                      34\n",
       "gopalapuram                    34\n",
       "thiruvanmiyur                  33\n",
       "saroornagar                    33\n",
       "palihill                       33\n",
       "perambur                       33\n",
       "kolathur                       33\n",
       "purasavakkam                   33\n",
       "lbnagar                        32\n",
       "habsiguda                      32\n",
       "dadar                          32\n",
       "vasantkunj                     32\n",
       "ulsoor                         31\n",
       "asraonagar                     31\n",
       "yelahanka                      31\n",
       "kompally                       31\n",
       "matunga                        31\n",
       "karapakkam                     30\n",
       "mahabalipuram                  30\n",
       "paschimvihar                   30\n",
       "selaiyur                       30\n",
       "mahakali                       30\n",
       "kammanahalli                   30\n",
       "guindy                         29\n",
       "malakpet                       29\n",
       "vikaspuri                      29\n",
       "chennai                        29\n",
       "sector15                       29\n",
       "residencyroad                  29\n",
       "mahim                          29\n",
       "hennur                         29\n",
       "worli                          29\n",
       "airoli                         29\n",
       "sdroad                         28\n",
       "chittoorroad                   28\n",
       "kamlanagar                     28\n",
       "madipakkam                     28\n",
       "karolbagh                      28\n",
       "banaswadi                      28\n",
       "filmnagar                      28\n",
       "pallavaram                     27\n",
       "nituniversity                  27\n",
       "kumaraswamylayout              27\n",
       "somajiguda                     27\n",
       "bowenpally                     26\n",
       "triplicane                     26\n",
       "chullickal                     26\n",
       "kalkaji                        26\n",
       "nagawara                       26\n",
       "nampally                       26\n",
       "oldairportroad                 25\n",
       "bhayandar                      25\n",
       "vennala                        25\n",
       "hyderabad                      25\n",
       "churchstreet                   25\n",
       "lavelleroad                    25\n",
       "sion                           24\n",
       "nerul                          24\n",
       "shahdara                       24\n",
       "panjagutta                     24\n",
       "aminijikarai                   24\n",
       "choolaimedu                    24\n",
       "nizampet                       23\n",
       "kurla                          23\n",
       "lakdikapul                     23\n",
       "satyaniketan                   23\n",
       "chengalpattu                   23\n",
       "vanasthalipuram                23\n",
       "attapur                        23\n",
       "valasaravakkam                 22\n",
       "jogeshwari                     22\n",
       "sector49                       22\n",
       "aerocity                       22\n",
       "vepery                         22\n",
       "krishnanagar                   22\n",
       "virar                          22\n",
       "masabtank                      22\n",
       "linkingroad                    22\n",
       "willingdonisland               22\n",
       "kknagar                        22\n",
       "sushantlok                     21\n",
       "westmambalam                   21\n",
       "krpuram                        21\n",
       "nagarbhavi                     21\n",
       "laxminagar                     21\n",
       "brigaderoad                    21\n",
       "amberpet                       21\n",
       "pgroad                         21\n",
       "ecil                           21\n",
       "sakinaka                       20\n",
       "charminar                      20\n",
       "girgaum                        20\n",
       "motinagar                      20\n",
       "sector62                       20\n",
       "marredpally                    20\n",
       "egatoor                        19\n",
       "panchpakhadi                   19\n",
       "sahakaranagar                  19\n",
       "kacheguda                      19\n",
       "alwal                          19\n",
       "chetpet                        19\n",
       "netajisubhashplace             19\n",
       "poonamalle                     19\n",
       "yeshwantpur                    19\n",
       "chanakyapuri                   19\n",
       "kalyan                         19\n",
       "defencecolony                  19\n",
       "jeedimetla                     19\n",
       "chowpatty                      19\n",
       "thousandlights                 19\n",
       "sector31                       19\n",
       "dadarshivajipark               19\n",
       "chandanagar                    19\n",
       "taramani                       19\n",
       "rapuram                        19\n",
       "adambakkam                     18\n",
       "churchgate                     18\n",
       "kotikoti                       18\n",
       "sector37                       18\n",
       "neelangarai                    18\n",
       "jeevanbhimanagar               18\n",
       "nallakunta                     18\n",
       "ravipuram                      18\n",
       "sector14                       17\n",
       "dahisar                        17\n",
       "pallikaranai                   17\n",
       "nearsector72                   17\n",
       "basaveshwaranagar              17\n",
       "eastofkailash                  17\n",
       "nacharam                       17\n",
       "angamali                       17\n",
       "cbd-belapur                    17\n",
       "charniroad                     17\n",
       "sohnaroad                      17\n",
       "vasantvihar                    17\n",
       "karkardooma                    17\n",
       "srinagarcolony                 16\n",
       "nanganallur                    16\n",
       "veeradesaiarea                 16\n",
       "elamakkara                     16\n",
       "georgetown                     16\n",
       "kanakapuraroad                 16\n",
       "richmondroad                   16\n",
       "kaggadasapura                  16\n",
       "khanmarket                     16\n",
       "perumbavoor                    16\n",
       "maduravoyal                    16\n",
       "oshiwara                       16\n",
       "hebbal                         15\n",
       "cunninghamroad                 15\n",
       "parelparel                     15\n",
       "naupada                        15\n",
       "4bungalows                     15\n",
       "domlur                         15\n",
       "hauzkhas                       15\n",
       "byculla                        15\n",
       "karkhana                       15\n",
       "basheerbagh                    15\n",
       "seshadripuram                  15\n",
       "avadi                          15\n",
       "oldrailwayroad                 15\n",
       "sector7                        14\n",
       "kirtinagar                     14\n",
       "safdarjung                     14\n",
       "tilaknagar                     14\n",
       "rajnagar                       14\n",
       "azadnagar                      14\n",
       "medchalroad                    14\n",
       "narayanguda                    14\n",
       "rajindernagar                  14\n",
       "bommanahalli                   14\n",
       "hauzkhasvillage                14\n",
       "malkajgiri                     14\n",
       "yousufguda                     13\n",
       "washermenpet                   13\n",
       "chittaranjanpark               13\n",
       "jailroad                       13\n",
       "southcity2                     13\n",
       "mohammadaliroad                13\n",
       "nehruplace                     13\n",
       "saidapet                       13\n",
       "grantroad                      13\n",
       "tarnaka                        13\n",
       "sector63                       13\n",
       "semmancheri                    13\n",
       "sda                            13\n",
       "hillroad                       13\n",
       "tardeo                         13\n",
       "moosapet                       13\n",
       "adikmet                        12\n",
       "sector16                       12\n",
       "bhandup                        12\n",
       "newfriendscolony               12\n",
       "cvramannagar                   12\n",
       "saligramam                     12\n",
       "padmaraonagar                  12\n",
       "sector45                       12\n",
       "racecourseroad                 12\n",
       "greenpark                      12\n",
       "sector22                       12\n",
       "hafeezpet                      12\n",
       "kanchipuramdistrict            12\n",
       "majestic                       12\n",
       "virugambakkam                  12\n",
       "internationalairport           12\n",
       "dlfphase1                      12\n",
       "oldmahabalipuramroad(omr)      12\n",
       "sanpada                        11\n",
       "koparkhairane                  11\n",
       "ashokviharphase2               11\n",
       "westpatelnagar                 11\n",
       "stthomasmount                  11\n",
       "gaurcity1                      11\n",
       "janpath                        11\n",
       "vypin                          11\n",
       "paradisecircle                 11\n",
       "khairatabad                    11\n",
       "royapuram                      11\n",
       "stmarksroad                    11\n",
       "nandanam                       11\n",
       "paharganj                      11\n",
       "shamshabad                     11\n",
       "sector38                       11\n",
       "padur                          11\n",
       "7bungalows                     11\n",
       "sector12                       11\n",
       "crossingrepublik               11\n",
       "arumbakkam                     11\n",
       "sowcarpet                      11\n",
       "anandvihar                     10\n",
       "ipextension                    10\n",
       "nalasopara                     10\n",
       "shantinagar                    10\n",
       "chandnichowk                   10\n",
       "kotturpuram                    10\n",
       "rammurthynagar                 10\n",
       "mazgaon                        10\n",
       "mayurviharphase1               10\n",
       "shalimarbagh                   10\n",
       "kothaguda                      10\n",
       "parktown                       10\n",
       "versova                        10\n",
       "narimanpoint                   10\n",
       "injambakkam                    10\n",
       "vikhroli                       10\n",
       "gandipet                        9\n",
       "nearsector110                   9\n",
       "mumbai                          9\n",
       "langerhouz                      9\n",
       "lodhicolony                     9\n",
       "falaknuma                       9\n",
       "seawoods                        9\n",
       "shamirpet                       9\n",
       "mysoreroad                      9\n",
       "mrcnagar                        9\n",
       "musheerabad                     9\n",
       "vaishali                        9\n",
       "mukherjeenagar                  9\n",
       "vandalur                        9\n",
       "sanjaynagar                     9\n",
       "sproad                          9\n",
       "shakarpur                       9\n",
       "chhatarpur                      9\n",
       "ekkaduthangal                   9\n",
       "subhashnagar                    9\n",
       "preetvihar                      9\n",
       "necklaceroad                    9\n",
       "geetacolony                     9\n",
       "trimulgherry                    9\n",
       "shahpurjat                      9\n",
       "ghodbunderroad                  8\n",
       "mumbaicstarea                   8\n",
       "akkarai                         8\n",
       "sector26                        8\n",
       "sector83                        8\n",
       "ghansibazaar                    8\n",
       "nagole                          8\n",
       "bengaluru                       8\n",
       "railwaystationroad              8\n",
       "modeltown2                      8\n",
       "oldmadrasroad                   8\n",
       "kottivakkam                     8\n",
       "kalbadevi                       8\n",
       "hbrlayout                       8\n",
       "kailashcolony                   8\n",
       "kelambakkam                     8\n",
       "ashokviharphase1                8\n",
       "khelgaonmarg                    8\n",
       "dlfphase2                       8\n",
       "jangpura                        8\n",
       "greaternoida                    7\n",
       "mehrauli                        7\n",
       "balanagar                       7\n",
       "sector72                        7\n",
       "prabhadevi                      7\n",
       "tagoregarden                    7\n",
       "reclamation                     7\n",
       "shenoynagar                     7\n",
       "gamma1                          7\n",
       "breachcandy                     7\n",
       "kanathur                        7\n",
       "amarcolony                      7\n",
       "chandrayanagutta                7\n",
       "sector19                        7\n",
       "sainikfarms                     7\n",
       "manpada                         7\n",
       "suraram                         7\n",
       "eastpatelnagar                  7\n",
       "thippasandra                    7\n",
       "mayurviharphase2                7\n",
       "prashantvihar                   7\n",
       "adchini                         7\n",
       "nearsector50                    7\n",
       "begumbazaar                     7\n",
       "newdelhi                        7\n",
       "sector43                        7\n",
       "kamothe                         7\n",
       "jamamasjid                      7\n",
       "sector56                        7\n",
       "sadashivnagar                   7\n",
       "vasundhara                      7\n",
       "gujranwalatown                  7\n",
       "chandivali                      7\n",
       "sahibabad                       6\n",
       "kempscorner                     6\n",
       "jasola                          6\n",
       "sector135                       6\n",
       "mahalaxmi                       6\n",
       "sector10                        6\n",
       "kovalam                         6\n",
       "ulhasnagar                      6\n",
       "vivekvihar                      6\n",
       "ramanthapur                     6\n",
       "khopat                          6\n",
       "kengeri                         6\n",
       "wilsongarden                    6\n",
       "cuffeparade                     6\n",
       "koyambedu                       6\n",
       "newpanvel                       6\n",
       "mahipalpur                      6\n",
       "pandararoadmarket               6\n",
       "majnukatila                     6\n",
       "sector53                        6\n",
       "sector110                       6\n",
       "mayapuriphase2                  6\n",
       "citymarket                      6\n",
       "secunderabad                    6\n",
       "alandur                         6\n",
       "munirka                         6\n",
       "palaceroad                      6\n",
       "chandernagar                    6\n",
       "marinelines                     6\n",
       "yusufsarai                      6\n",
       "Name: LOCALITY, dtype: int64"
      ]
     },
     "execution_count": 246,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['LOCALITY'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 247,
   "metadata": {},
   "outputs": [],
   "source": [
    "# y = df_train['COST'].values\n",
    "# df = pd.concat([df_train.drop(columns=['COST']), df_val])\n",
    "# df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 248,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1606"
      ]
     },
     "execution_count": 248,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Substitute using TITLE or CITY\n",
    "df.RATING = df.RATING.replace(\"NEW\",np.nan)\n",
    "df.RATING = df.RATING.replace(\"-\",np.nan)\n",
    "df.RATING = df.RATING.astype('float')\n",
    "df.RATING.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 249,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1606"
      ]
     },
     "execution_count": 249,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.VOTES = df.VOTES.str.replace(\" votes\",\"\")\n",
    "df.VOTES = df.VOTES.astype('float')\n",
    "df.VOTES.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 250,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Filling missing values using groupby mean values of each city and locality\n",
    "df.RATING.fillna(df.groupby(['CITY','LOCALITY'])['RATING'].transform('mean'), inplace=True)\n",
    "df.VOTES.fillna(df.groupby(['CITY','LOCALITY'])['VOTES'].transform('mean'), inplace=True)\n",
    "df.RATING.fillna(df.RATING.mean(), inplace=True)\n",
    "df.VOTES.fillna(df.VOTES.mean(), inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['sum_rating'] = df['RATING']*df['VOTES']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 252,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.drop(columns=['TITLE', 'RESTAURANT_ID', 'CUISINES', 'TIME', 'LOCALITY'], inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 253,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(16921, 240)"
      ]
     },
     "execution_count": 253,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_dummies = pd.get_dummies(df)\n",
    "df_dummies.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 254,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_dummies_train = df_dummies[:ntrain]\n",
    "df_dummies_test = df_dummies[ntrain:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Modelling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import KFold, cross_val_score\n",
    "from sklearn.linear_model import Ridge, ElasticNet, Lasso\n",
    "from sklearn.pipeline import make_pipeline\n",
    "#Validation function\n",
    "n_folds = 5\n",
    "\n",
    "def rmsle_cv(model):\n",
    "    kf = KFold(n_folds, shuffle=True, random_state=42).get_n_splits(df_dummies_train.values)\n",
    "    rmse= np.sqrt(-cross_val_score(model, df_dummies_train.values, y.ravel(), scoring=\"neg_mean_squared_error\", cv = kf))\n",
    "    return(rmse)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Lasso"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Lasso score: 350.6892 (27.7813)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler, StandardScaler\n",
    "lasso = make_pipeline(StandardScaler(), Lasso(alpha =0.0005, random_state=1, max_iter=5000))\n",
    "score = rmsle_cv(lasso)\n",
    "print(\"\\nLasso score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Elastic Net"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ElasticNet score: 350.6877 (27.7870)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "ENet = make_pipeline(StandardScaler(), ElasticNet(alpha=0.0005, l1_ratio=.5, random_state=3, max_iter=5000))\n",
    "score = rmsle_cv(ENet)\n",
    "print(\"ElasticNet score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Kernel Ridge"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Kernel Ridge score: 330.1802 (31.4241)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.kernel_ridge import KernelRidge\n",
    "KRR = make_pipeline(StandardScaler(), KernelRidge(alpha=0.6, kernel='polynomial', degree=2, coef0=2.5))\n",
    "score = rmsle_cv(KRR)\n",
    "print(\"Kernel Ridge score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Random Forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Random Forest score: 320.8467 (38.3312)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestRegressor\n",
    "rf = RandomForestRegressor(n_estimators=2000, n_jobs=-1)\n",
    "score = rmsle_cv(rf)\n",
    "print(\"Random Forest score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 256,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Random Forest score: 318.8944 (37.9215)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestRegressor\n",
    "rf = RandomForestRegressor(n_estimators=2000, n_jobs=-1)\n",
    "score = rmsle_cv(rf)\n",
    "print(\"Random Forest score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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ERERERExLUkwR0RERERERERERMS0JMEcEREREREREREREdOSBHNERERERERERERETEsSzBERERERERERERExLUkwR0RERERERERERMS0JMEcEREREREREREREdOSBHNERERERERERERETEsSzBERERERERERERExLUkwR0RERERERERERMS0JMEcEREREREREREREdOSBHNERERERERERERETEsSzBERERERERERERExLUkwR0RERERERERERMS0JMEcEREREREREREREdOSBHNERERERERERERETEsSzBERERERERERERExLUkwR0RERERERERERMS0JMEcEREREREREREREdOSBHNERERERERERERETEsSzBERERERERERERExLUkwR0RERERERERERMS0JMEcEREREREREREREdOSBHNERERERERERERETEsSzBERERERERERERExLUkwR0RERERERERERMS0JMEcEREREREREREREdOSBHNERERERERERERETEsSzBERERERERERERExLUkwR0RERERERERERMS0JMEcEREREREREREREdOSBHNERERERERERERETEsSzBERERERERERERExLUkwR0RERERERERERMS0JMEcEREREREREREREdOSBHNERERERERERERETEsSzBERERERERERERExLUkwR0RERERERERERMS0JMEcEREREREREREREdOSBHNERERERERERERETEsSzBERERERERERERExLUkwR0RERERERERERMS0JMEcEREREREREREREdOSBHNERERERERERERETEsSzBERERERERERERExLUu3HUBERMQwrf2u787pv3f9h583p/9eRERERERExHySGcwRERERERERERERMS2ZwRwREdEhczlDO7OzIyIiIiIiYkmSYI6IiIh5ofbyJhkciIiIiIiIGiXBHBEREREzUvvgQERERERETCwJ5oiIiIiICSR5HhERERExuTT5i4iIiIiIiIiIiIhpyQzmiIiIiIgRlRnaERERETFTSTBHRERERER1kjyPiIiImBspkRERERERERERERER05IZzBERERERER0zlzO0Mzs7IiIiJpMEc0RERERERMwbtZc3yeBARETUJgnmiIiIiIiIiJix2gcHIiJifEkwR0RERERERERMovbkec3nV/O5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\n",
      "text/plain": [
       "<Figure size 1440x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "rf.fit(df_dummies_train, y.ravel())\n",
    "# Output feature importance coefficients, map them to their feature name, and sort values\n",
    "coef = pd.Series(rf.feature_importances_, index = df_dummies_train.columns).sort_values(ascending=False)\n",
    "\n",
    "plt.figure(figsize=(20, 10))\n",
    "coef.head(25).plot(kind='bar')\n",
    "plt.title('Feature Significance')\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 257,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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tn2N7TuBbwA7jXnPTsCRzetvA0+XpPbCjIiIiIiIiIiIiIjZZjIJ5tWBPwxtX9fsG/c9tv8D/AN4QHNsbUkXSjpN0pPH+wskvUbSeZLO++tf/3qvTiAiIiIiIiIiIiIiujGZBPN4M5E9yff8CVjT9ibAvsAxklZc4I324bY3s73ZqquuOomQIiIiIiIiIiIiIqJrk0kwXwc8bGh7DeCPC3uPpKWAlYC/2/637RsBbJ8P/AZYf3GDjoiIiIiIiIiIiIjuTSbBfC6wnqS1JS0D7AocP+Y9xwMvb16/APipbUtatWkSiKR1gPWAa9oJPSIiIiIiIiIiIiK6tNSi3mD7P5JeD/wYWBL4iu3LJB0InGf7eODLwFGSrgb+TklCAzwFOFDSf4C7gdfa/vt0nEhEREREREREREREzKxFJpgBbP8A+MGYfe8Zen0HsMs433cccNxixhgRERERERERERERs9BkSmRERERERERERERERCxgUjOYIyLGM2f/E2f077v2oB1m9O+LiIiIiIiIiIiJZQZzRERERERERERERExJEswRERERERERERERMSVJMEdERERERERERETElCTBHBERERERERERERFTkgRzRERERERERERERExJEswRERERERERERERMSVJMEdERERERERERETElCTBHBERERERERERERFTkgRzRERERERERERERExJEswRERERERERERERMSVJMEdERERERERERETElCTBHBERERERERERERFTkgRzRERERERERERERExJEswRERERERERERERMSVLdR1ARMRsNGf/E2f077v2oB1m9O+LiIiIiIiIiGhDZjBHRERERERERERExJQkwRwRERERERERERERU5IEc0RERERERERERERMSRLMERERERERERERETElSTBHRERERERERERExJQs1XUAEREx8+bsf+KM/n3XHrTDjP59ERERERERETEzMoM5IiIiIiIiIiIiIqYkCeaIiIiIiIiIiIiImJIkmCMiIiIiIiIiIiJiSpJgjoiIiIiIiIiIiIgpSYI5IiIiIiIiIiIiIqYkCeaIiIiIiIiIiIiImJIkmCMiIiIiIiIiIiJiSpJgjoiIiIiIiIiIiIgpSYI5IiIiIiIiIiIiIqYkCeaIiIiIiIiIiIiImJIkmCMiIiIiIiIiIiJiSpJgjoiIiIiIiIiI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\n",
      "text/plain": [
       "<Figure size 1440x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "rf.fit(df_dummies_train, y.ravel())\n",
    "# Output feature importance coefficients, map them to their feature name, and sort values\n",
    "coef = pd.Series(rf.feature_importances_, index = df_dummies_train.columns).sort_values(ascending=False)\n",
    "\n",
    "plt.figure(figsize=(20, 10))\n",
    "coef.head(25).plot(kind='bar')\n",
    "plt.title('Feature Significance')\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XGBoost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [],
   "source": [
    "import xgboost as xgb\n",
    "model_xgb = xgb.XGBRegressor(learning_rate =0.05,\n",
    "        n_estimators=5000,\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.99,\n",
    "        colsample_bytree=0.5,\n",
    "        reg_alpha=1,\n",
    "        nthread=4,\n",
    "        scale_pos_weight=1,\n",
    "        seed=27)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Xgboost score: 327.0732 (34.9732)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "score = rmsle_cv(model_xgb)\n",
    "print(\"Xgboost score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 258,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Xgboost score: 322.6303 (36.4569)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "score = rmsle_cv(model_xgb)\n",
    "print(\"Xgboost score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABZgAAALICAYAAADyhJW9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3X3QZndd3/HP190mKCjysFNLnjZi7BiLhs4S61gfpg2QmJqkHRmDtY0PbdQxYx2qQ3xooFHbiA+tHdOB1GacSumCz9sSJqJVW8ZJ2UUS7AZTNkvI7sTWhQRRwOCGb/+4rrSXu3fYa7+5s/cueb1m7sl1zvmdc37Xtf+95+R3qrsDAAAAAAAn6zO2egIAAAAAAJyZBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAADYBFV1flX9aVVt24Rr/UBV/ezK9t+tqkPL67+4qvZX1dc82fsAAMCTVd291XMAAODTXFU9kOQvJ3lsZfcXdvdDT+KaX5Pkjd197pOb3Und89wkP53kq5P8pSQPJvnJ7v65p/i+9yd5VXf/2lN5HwAAOFnbt3oCAAA8bXxdd//GVk/icVW1vbuPnuRpP5/kniQXJHk0yYuSfN5mz20DFyTZfwruAwAAJ8USGQAAbKmq+htV9btV9eGqumd16Yeq+paqem9V/UlVHayqb1/uf2aStyV5wXLZiD+tqhdU1c9V1Y+snP81VXV4ZfuBqnp1Vb0nyUeravvyvF+qqiNV9f6q+u5PMd2XJPm57v5odx/t7nd399uW195ZVV1V25fbF1bVf1vO/Teq6taqeuMxY6+rqger6oNV9YMr83xtVb2xqs6uqj9Nsi3JPcsnmR//HpctP29bLqlx//Je76qq85bHfnq5tMZHlvu/8ph7vKWq/sPyvP1VtWvl+HlV9cvL3+VDVfUzK8e+dfnv8khV3VlVF6z/Lw4AwKcTgRkAgC1TVeckeWuSH0ny3CTfm+SXqmrHcsgfJfk7ST4nybck+VdV9de7+6NJrkjyUHc/a/m37nIbr0xyZZLPTfLJJP85i6eSz0nyt5N8T1W9/AnOvSvJrVV1bVWdf4L7vCnJO5M8L8lrk/yDDcb8zSR/dXnfm6rqi1YPdvej3f2s5eaXdvcLN7jGq5bf6Wuz+J2+NcnHlsf2Jrkki9/2TUl+oaqesXLuVUl2Z/Fb7EnyM8kiWif5L0k+kGRnFr/N7uWxa5L8QJK/l2RHkv+e5D+d4LcAAODTlMAMAMCp8qvLp5Q/XFW/utz3TUnu6O47uvuT3f32JPuyiKXp7rd29/298DtJfj3JV258+bX9m+4+1N0fz+KJ5B3dfXN3f6K7Dyb5d0mufYJzX5FFUP1nSd5fVXdX1UuOHbSMzy9JctPyuu/IIuAe659398e7+54sIveXDr7PP0ryQ9193/J3uqe7P5Qk3f3G7v7Q8mnrn0xydhZB+3HvWP72j2Wx/Mfj9780yQuSfN/yae0/W36HJPn2JP+yu9+7XGLkXyS5xFPMAABPTwIzAACnyjXd/bnLv2uW+y5I8oqV8PzhLJ7q/StJUlVXVNVdVfXw8tjXJnn+k5zHoZXPF2SxzMbq/X8gixcSHqe7H+nuG7v7i5dj7s4inNcxQ1+Q5OHu/tjKvkM53v9e+fyxJM/aYMyJnJfk/o0OVNU/XS5l8cfL7/bs/MXf79j7P2O5xMd5ST7wBGtUX5Dkp1d+r4eTVBZPOQMA8DTjJX8AAGylQ0l+vrv/8bEHqursJL+U5B8m+bXu/vPlk8+Px9ze4HofTfJZK9sbvYBv9bxDSd7f3Red7MS7+4NV9RNJrstiCYpVf5jkuVX1WSuR+byTvceaDiV5YZL/ubpzud7yq7NYfmN/d3+yqh7J///9TnTN85/gRYiHkvxod//HJz91AADOdJ5gBgBgK70xyddV1cuXL6t7xvLFfOcmOSuLJR2OJDlaVVckednKuf8nyfOq6tkr++5O8rVV9dyq+rwk33OC+78zyUeWL/77zOUc/tpGy14kSVX92PL49qr67CTfmeTA40tSPK67P5DFUh+vraqzqurLk3zduj/KSfrZJD9cVRfVwpdU1fOSfHaSo1n8ftur6qYs1mhexzuziOS3VNUzl/8uX7E89vok319VX5wkVfXsqnrFpn4jAADOGAIzAABbprsPJbk6i2UpjmTxdOz3JfmM7v6TJN+d5C1JHknyjVlZx7i7/yCLl8sdXC7X8IIs1hG+J8kDWazX/OYT3P+xLMLvJUnen+SDWQTbZz/BKZ+V5FeSfDjJwSyWi7jqCcb+/SRfnuRDWbzE8M1JHv1U8xn6qSx+o19P8pEk/z7JZya5M8nbkvyvLF7W92fZeJmO46z8Ll+Q5MEkh5N8w/LYryT5sSS7q+ojWTw5fcXmfR0AAM4k1b3R/1kIAABspqp6c5I/6O7XbPVcAABgs3iCGQAAngJV9ZKqemFVfUZVXZ7Fk9q/utXzAgCAzeQlfwAA8NT4vCS/nOR5WSwx8Z3d/e6tnRIAAGwuS2QAAAAAADBiiQwAAAAAAEZOuyUynv/85/fOnTu3ehoAAAAAAE9b73rXuz7Y3TtONO60C8w7d+7Mvn37tnoaAAAAAABPW1X1gXXGWSIDAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAICRtQJzVV1eVfdV1YGqunGD499RVb9fVXdX1Tuq6uLl/p1V9fHl/rur6vWb/QUAAAAAANga2080oKq2Jbk1yUuTHE6yt6r2dPe9K8Pe1N2vX46/KslPJbl8eez+7r5kc6cNAAAAAMBWW+cJ5kuTHOjug939iSS7k1y9OqC7P7Ky+cwkvXlTBAAAAADgdLROYD4nyaGV7cPLfX9BVX1XVd2f5HVJvnvl0IVV9e6q+p2q+sqNblBV11fVvqrad+TIkZOYPgAAAAAAW2WdwFwb7DvuCeXuvrW7X5jk1Ul+aLn7D5Oc390vTvKqJG+qqs/Z4NzbuntXd+/asWPH+rMHAAAAAGDLrBOYDyc5b2X73CQPfYrxu5NckyTd/Wh3f2j5+V1J7k/yhbOpAgAAAABwOlknMO9NclFVXVhVZyW5Nsme1QFVddHK5pVJ3rfcv2P5ksBU1ecnuSjJwc2YOAAAAAAAW2v7iQZ099GquiHJnUm2Jbm9u/dX1c1J9nX3niQ3VNVlSf48ySNJrlue/lVJbq6qo0keS/Id3f3wU/FFAAAAAAA4tar7uOWUt9SuXbt63759Wz0NAAAAAICnrap6V3fvOtG4dZbIAAAAAACA4wjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMbN/qCWyWnTe+9ZTe74Fbrjyl9wMAAAAAON14ghkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgBGBGQAAAACAEYEZAAAAAIARgRkAAAAAgJG1AnNVXV5V91XVgaq6cYPj31FVv19Vd1fVO6rq4pVj3788776qevlmTh4AAAAAgK1zwsBcVduS3JrkiiQXJ3nlakBeelN3v6i7L0nyuiQ/tTz34iTXJvniJJcn+bfL6wEAAAAAcIZb5wnmS5Mc6O6D3f2JJLuTXL06oLs/srL5zCS9/Hx1kt3d/Wh3vz/JgeX1AAAAAAA4w21fY8w5SQ6tbB9O8mXHDqqq70ryqiRnJflbK+fedcy554xmCgAAAADAaWWdJ5hrg3193I7uW7v7hUleneSHTubcqrq+qvZV1b4jR46sMSUAAAAAALbaOoH5cJLzVrbPTfLQpxi/O8k1J3Nud9/W3bu6e9eOHTvWmBIAAAAAAFttncC8N8lFVXVhVZ2VxUv79qwOqKqLVjavTPK+5ec9Sa6tqrOr6sIkFyV555OfNgAAAAAAW+2EazB399GquiHJnUm2Jbm9u/dX1c1J9nX3niQ3VNVlSf48ySNJrlueu7+q3pLk3iRHk3xXdz/2FH0XAAAAAABOoXVe8pfuviPJHcfsu2nl8z/5FOf+aJIfnU4QAAAAAIDT0zpLZAAAAAAAwHEEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARgRmAAAAAABGBGYAAAAAAEYEZgAAAAAARtYKzFV1eVXdV1UHqurGDY6/qqrurar3VNVvVtUFK8ceq6q7l397NnPyAAAAAABsne0nGlBV25LcmuSlSQ4n2VtVe7r73pVh706yq7s/VlXfmeR1Sb5heezj3X3JJs8bAAAAAIAtts4TzJcmOdDdB7v7E0l2J7l6dUB3/1Z3f2y5eVeSczd3mgAAAAAAnG7WCcznJDm0sn14ue+JfFuSt61sP6Oq9lXVXVV1zUYnVNX1yzH7jhw5ssaUAAAAAADYaidcIiNJbbCvNxxY9U1JdiX56pXd53f3Q1X1+Un+a1X9fnff/xcu1n1bktuSZNeuXRteGwAAAACA08s6TzAfTnLeyva5SR46dlBVXZbkB5Nc1d2PPr6/ux9a/vdgkt9O8uInMV8AAAAAAE4T6wTmvUkuqqoLq+qsJNcm2bM6oKpenOQNWcTlP1rZ/5yqOnv5+flJviLJ6ssBAQAAAAA4Q51wiYzuPlpVNyS5M8m2JLd39/6qujnJvu7ek+THkzwryS9UVZI82N1XJfmiJG+oqk9mEbNv6W6BGQAAAADg08A6azCnu+9Icscx+25a+XzZE5z3u0le9GQmCAAAAADA6WmdJTIAAAAAAOA4AjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjawXmqrq8qu6rqgNVdeMGx19VVfdW1Xuq6jer6oKVY9dV1fuWf9dt5uQBAAAAANg6JwzMVbUtya1JrkhycZJXVtXFxwx7d5Jd3f0lSX4xyeuW5z43yWuSfFmSS5O8pqqes3nTBwAAAABgq6zzBPOlSQ5098Hu/kSS3UmuXh3Q3b/V3R9bbt6V5Nzl55cneXt3P9zdjyR5e5LLN2fqAAAAAABspXUC8zlJDq1sH17ueyLfluRtw3MBAAAAADhDbF9jTG2wrzccWPVNSXYl+eqTObeqrk9yfZKcf/75a0wJAAAAAICtts4TzIeTnLeyfW6Sh44dVFWXJfnBJFd196Mnc25339bdu7p7144dO9adOwAAAAAAW2idwLw3yUVVdWFVnZXk2iR7VgdU1YuTvCGLuPxHK4fuTPKyqnrO8uV+L1vuAwAAAADgDHfCJTK6+2hV3ZBFGN6W5Pbu3l9VNyfZ1917kvx4kmcl+YWqSpIHu/uq7n64qn44i0idJDd398NPyTcBAAAAAOCUWmcN5nT3HUnuOGbfTSufL/sU596e5PbpBAEAAAAAOD2ts0QGAAAAAAAcR2AGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBEYAYAAAAAYERgBgAAAABgRGAGAAAAAGBkrcBcVZdX1X1VdaCqbtzg+FdV1e9V1dGq+vpjjj1WVXcv//Zs1sQBAAAAANha2080oKq2Jbk1yUuTHE6yt6r2dPe9K8MeTPLNSb53g0t8vLsv2YS5AgAAAABwGjlhYE5yaZID3X0wSapqd5Krk/y/wNzdDyyPffIpmCMAAAAAAKehdZbIOCfJoZXtw8t963pGVe2rqruq6pqNBlTV9csx+44cOXISlwYAAAAAYKusE5hrg319Evc4v7t3JfnGJP+6ql543MW6b+vuXd29a8eOHSdxaQAAAAAAtso6gflwkvNWts9N8tC6N+juh5b/PZjkt5O8+CTmBwAAAADAaWqdwLw3yUVVdWFVnZXk2iR71rl4VT2nqs5efn5+kq/IytrNAAAAAACcuU4YmLv7aJIbktyZ5L1J3tLd+6vq5qq6Kkmq6iVVdTjJK5K8oar2L0//oiT7quqeJL+V5JbuFpgBAAAAAD4NbF9nUHffkeSOY/bdtPJ5bxZLZxx73u8medGTnCMAAAAAAKehdZbIAAAAAACA4wjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjAjMAAAAAACMCMwAAAAAAIwIzAAAAAAAjKwVmKvq8qq6r6oOVNWNGxz/qqr6vao6WlVff8yx66rqfcu/6zZr4gAAAAAAbK0TBuaq2pbk1iRXJLk4ySur6uJjhj2Y5JuTvOmYc5+b5DVJvizJpUleU1XPefLTBgAAAABgq63zBPOlSQ5098Hu/kSS3UmuXh3Q3Q9093uSfPKYc1+e5O3d/XB3P5Lk7Uku34R5AwAAAACwxbavMeacJIdWtg9n8UTyOjY695xjB1XV9UmuT5Lzzz9/zUs/vey88a2n7F4P3HLlKbsXAAAAAHDmWucJ5tpgX695/bXO7e7buntXd+/asWPHmpcGAAAAAGArrROYDyc5b2X73CQPrXn9J3MuAAAAAACnsXUC894kF1XVhVV1VpJrk+xZ8/p3JnlZVT1n+XK/ly33AQAAAABwhjthYO7uo0luyCIMvzfJW7p7f1XdXFVXJUlVvaSqDid5RZI3VNX+5bkPJ/nhLCL13iQ3L/cBAAAAAHCGW+clf+nuO5Lcccy+m1Y+781i+YuNzr09ye1PYo4AAAAAAJyG1lkiAwAAAAAAjiMwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADCyfasnADtvfOspvd8Dt1x5Su8HAAAAAJ+uPMEMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMCIwAwAAAAAwIjADAAAAADAiMAMAAAAAMDIWoG5qi6vqvuq6kBV3bjB8bOr6s3L4/+jqnYu9++sqo9X1d3Lv9dv7vQBAAAAANgq2080oKq2Jbk1yUuTHE6yt6r2dPe9K8O+Lckj3f0FVXVtkh9L8g3LY/d39yWbPG8AAAAAALbYCQNzkkuTHOjug0kWuTAFAAAgAElEQVRSVbuTXJ1kNTBfneS1y8+/mORnqqo2cZ5wxtp541tP2b0euOXKU3YvAAAAAFhniYxzkhxa2T683LfhmO4+muSPkzxveezCqnp3Vf1O1f9l787jbZ3r/o+/3scQMtwUGsiUSCJFKk10U92lUgolkmbdkSYNv1tplDRQKUNuKYqklAaFiJLMMt1JGjQYimQe3r8/vt91zjr7rL3Psffa+9rXtd7Px+M8zrqutbbzuey91/pen+/3+/noGYP+AUlvkHSepPNuuOGGB3QBEREREREREREREdGMRUkwD1qJ7EV8zV+BR9neBNgbOEbS8gu80D7U9qa2N1155ZUXIaSIiIiIiIiIiIiIaNqiJJj/DKzed7wa8JfxXiNpcWAF4B+277J9E4Dt84HfAY+ZatARERERERERERER0bxFSTD/GlhX0lqSlgR2BE4a85qTgF3r4+2B02xb0sq1SSCS1gbWBa4ZTugRERERERERERER0aSFNvmzfa+ktwI/BhYDvmL7Mkn7AefZPgk4Ajha0tXAPyhJaIBnAvtJuhe4D3iT7X9Mx4VERERERERERERExMxaaIIZwPYPgB+MOfc/fY/vBF4+4OtOAE6YYowRERERERERERERMQstSomMiIiIiIiIiIiIiIgFJMEcEREREREREREREZOSBHNERERERERERERETEoSzBERERERERERERExKUkwR0RERERERERERMSkJMEcEREREREREREREZOSBHNERERERERERERETEoSzBERERERERERERExKUkwR0RERERERERERMSkJMEcEREREREREREREZOSBHNERERERERERERETEoSzBERERERERERERExKUkwR0RERERERERERMSkJMEcEREREREREREREZOSBHNERERERERERERETEoSzBERERERERERERExKUkwR0RERERERERERMSkJMEcEREREREREREREZOSBHNERERERERERERETEoSzBERERERERERERExKUkwR0RERERERERERMSkJMEcEREREREREREREZOSBHNERERERERERERETEoSzBERERERERERERExKUkwR0RERERERERERMSkLN50ABHRXmvuc/KM/nvXfuIFM/rvRURERERERETExLKCOSIiIiIiIiIiIiImJQnmiIiIiIiIiIiIiJiUlMiIiBgg5T8iIiIiIiIiIhYuK5gjIiIiIiIiIiIiYlKSYI6IiIiIiIiIiIiISUmCOSIiIiIiIiIiIiImJQnmiIiIiIiIiIiIiJiUJJgjIiIiIiIiIiIiYlKSYI6IiIiIiIiIiIiISUmCOSIiIiIiIiIiIiImZfGmA4iIiJm35j4nz+i/d+0nXjCj/15EREREREREzIysYI6IiIiIiIiIiIiISUmCOSIiIiIiIiIiIiImJQnmiIiIiIiIiIiIiJiUJJgjIiIiIiIiIiIiYlKSYI6IiIiIiIiIiIiISUmCOSIiIiIiIiIiIiImJQnmiIiIiIiIiIiIiJiUxZsOICIiYpjW3OfkGf33rv3EC2b034uIiIiIiIiYTZJgjoiIaJGZTKAneR4RERERERELkxIZERERERERERERETEpSTBHRERERERERERExKQkwRwRERERERERERERk5IazBERETErpEFjRERERERE+2QFc0RERERERERERERMShLMERERERERERERETEpSTBHRERERERERERExKSkBnNERETEDJjJGtOpLx0RERERETMlCeaIiIiImJI0aIyIiIiIGF0pkRERERERERERERERk5IEc0RERERERERERERMSkpkRERERESMo+vlP7p+fREREREx/bKCOSIiIiIiIiIiIiImJQnmiIiIiIiIiIiIiJiUJJgjIiIiIiIiIiIiYlKSYI6IiIiIiIiIiIiISUmTv4iIiIiI6JyuNzCcyetLc8aIiIiYSBLMERERERERMWtkcmB4MjkQEREzIQnmiIiIiIiIiJiyLk8OdPnaoNvX1+Vrg25PWnX9e9clSTBHREREREREREREzKAuTQ6kyV9ERERERERERERETEoSzBERERERERERERExKUkwR0RERERERERERMSkJMEcEREREREREREREZOSBHNERERERERERERETEoSzBERERERERERERExKUkwR0RERERERERERMSkLFKCWdLzJF0l6WpJ+wx4/kGSvlmf/5WkNfuee289f5Wk5w4v9IiIiIiIiIiIiIho0kITzJIWA74APB/YANhJ0gZjXrY78E/bjwY+A+xfv3YDYEfgccDzgC/W/15EREREREREREREtNyirGB+MnC17Wts3w18A3jxmNe8GDiqPv4W8BxJque/Yfsu278Hrq7/vYiIiIiIiIiIiIhoOdme+AXS9sDzbL+uHr8a2Nz2W/te85v6mj/X498BmwMfBM6x/bV6/gjgh7a/NebfeAPwhnq4HnDV1C9tkT0UuHEG/72Z1uXry7W1V5evr8vXBt2+vi5fG3T7+nJt7dXl6+vytUG3r6/L1wbdvr5cW3t1+fq6fG3Q7evr8rVBt68v1zY8a9heeWEvWnwR/kMacG5sVnq81yzK12L7UODQRYhl6CSdZ3vTJv7tmdDl68u1tVeXr6/L1wbdvr4uXxt0+/pybe3V5evr8rVBt6+vy9cG3b6+XFt7dfn6unxt0O3r6/K1QbevL9c28xalRMafgdX7jlcD/jLeayQtDqwA/GMRvzYiIiIiIiIiIiIiWmhREsy/BtaVtJakJSlN+04a85qTgF3r4+2B01xqb5wE7CjpQZLWAtYFzh1O6BERERERERERERHRpIWWyLB9r6S3Aj8GFgO+YvsySfsB59k+CTgCOFrS1ZSVyzvWr71M0nHA5cC9wB6275uma5msRkpzzKAuX1+urb26fH1dvjbo9vV1+dqg29eXa2uvLl9fl68Nun19Xb426Pb15draq8vX1+Vrg25fX5evDbp9fbm2GbbQJn8REREREREREREREYMsSomMiIiIiIiIiIiIiIgFJMEcEREREREREREREZOSBHNERERERERERERETMpCm/xFxMyRtASwIXCd7eubjmeqJC0GLG373/X4KcCS9ekLbd/aWHARERGxUJLWt32lpCcOet72BTMdU0RERETMLiPT5E/Si4HVbH+hHv8KWLk+/W7b32osuBkgaQ3bf2g6jsmStLPtr9XHW9g+u++5t9r+fHPRTZ6kLwEH275M0grAL4H7gJWAd9o+ttEAp0jSp4DrbX+yHv8e+A2wFHCB7fc0GV8sOklPB9a1faSklYFlbf++6bgiACStCKxu+5KmYxkWSS8AHkd5vwTA9n7NRRQTkbSV7dMkvXTQ87a/PdMxDYukQ22/QdLpA5627a1mPKhpImn/sWOTQefaSNIjgTXoW2Bk+8zmIoqJSNoWuKR3/ybpf4CXAX8A9uzKGEzS0sCjbF/VdCyxaCTtPdHztj89U7HEopO0BnCz7Vvq8ZbASyjvKZ+3fXeT8UU3jFKC+WxgR9t/qscXAc8BHgwcafs5TcY3LJKeCjwSONP29ZI2AvYBnmF79WajmzxJF9h+4tjHg47bRNJlth9XH+8FPNv2SyQ9DPih7U2ajXBqJF0IbGb73t6x7U0kCfi57ac3G+HUSLoUGPQmKspN90YzHNK0kLQvsCmwnu3HSHoEcLztLRoObcokPQZ4FwvedLc+YVInAl4PrMn81/bapmIaJkk/A15EubaLgBuAM2xPeOPTBnXycRlgS+BwYHvgXNu7NxrYFEn6rO29JH2PAe+dtl/UQFhDIelDtveVdOSAp92V37uuGzSmlHRJ2z/PJe0P7ABcTlnIAOXnsrW/cwCSDmbwOAwA22+bwXCGStIlwFNs3y7phcCngZ2ATYCX235uowEOQU2ifwpY0vZakp4A7NeBn8vdgZVsH1CPrwOWo9wfvNv2IU3GN1X1vgBgPWAz4KR6vC0lB/G6RgIbgi7f29UFltvZ/kv9Xfsp8HFgI+CeNn/fACS92/Ynx/tcaPnnQWuubZRKZCzZSy5XZ9m+CbhJ0oObCmqYJB0AvJByo/0eSd8H3gJ8DGj7jY3GeTzouE36Zwq3Bo4HsP23koNtvTm95HL1HiifzpKWbSimYXph0wHMkO0oNzQXANSByXLNhjQ0xwNfAg5j3k13V3wX+DllANm1awNYwfa/JL2OMlG8b70h74Kn2d6oJrY+JOlAoLUrYPscXf/+VKNRTAPb+9a/d2s6lukk6WksOGn11cYCGhJJb6aMmdce8z6yHHD24K9qlZdQJonvajqQITuv/r0FsAHwzXr8cuD8RiIaHtu+vT5+KXCE7fOB8yW9pcG4humDwJOBnwHYvkjSms2FMzRvAp7Xd3y97UdKWgo4BWh1gtn2hwAknQI8sVfyUNIHqfeyLdble7ulbf+lPt4Z+IrtAyXNoeSP2u6K+vd5E76qnVpzbaOUYF6x/8D2W/sOV6YbXgBsYvvOul34L8BGtn/bcFzD4HEeDzpuk5vrqoTrKIPj3QEkLQ4s3WRgQ7KkpOV6Aw/bpwDUciBLTfiVLdDmsjMP0N11UsAAXZmUq+5t+0qSCSzThW3dE1hc0sOBVwDvbzqYIbuz/n173TFwE7BWg/EMRU2OYPuMpmOZLpIeRNnGvibzJ2FbX95E0tHAOpQb0bmrYIHWJ5iBY4AfUlZz7dN3/lbb/2gmpKG6BlgC6FSC2fZRAJJeA2xp+556/CVKIq/NVBdj3E7ZdfvFvudaP4au7rV9S0cW1fSbUxey9fQWEN1ZS4J0xaOYf7HU3ZTPvtbqv7erJSXWtf3T+n1re+6s/xdtK+C9ALbv78LvoO3v1b+PajqWYWvTtbX9l+SB+JWk19s+rP+kpDcC5zYU07DdYftOANv/lHRVR5LLAOvXFSUC1ulbXSJg7ebCmrI3AgcBDwP2sv23ev45wMmNRTU8hwHflPQm23+EuR/Wh9TnOqE2LzwYeCylieFiwG22l280sOE5TtKXgf+Q9HrKjoiufP++V1cCnUjfjXdHEgrfl/Rftn/QdCDT5EPAjyk7kn4taW2gK59535P0H8ABlJ0Dpju/c0hal5LI24D5a0y3+fO857vALZTVk51K5lFKJW3gDtbXqzUpbwF2UmlQvCrlPmlZScv2xjAtdjtwkaRTmf+zbtZsq52iR1BWm/c+u5et59rss5TJnH8BV9g+D0DSJsBfmwxsiH4j6ZXAYvVz4W3ALxqOaRhW6D+w/TGAulL0IY1END2OBs6VdCJlnLId3ZhwpN7vvIHSF2kdYDXKjsc2l1U9TdJxlPePFYHTAOpijc7UX64lAt/DgmPM1pY/HK+0XM9sKis0SjWYVwG+QxlU9bpdPwl4EPAS239vKrZhkXQz0N+s45n9x7PpB++BqknJcY3QStLWkfQm4H2UeucA/wY+0aVVo5LOA3akrFDYFNgFeLTtzqyqlLQ1sA1lUufHtn/ScEhDodJ4cix3IdEl6VbK791dwD3Mqx/XiYkPjWn4Ot65tqk3oE+x/Yt6/CBgqZoA6wRJZwH7Ap+h1GzcjTIm3XfCL2wBSb+xvWHTcUwHSccDb7PdleTWAiS9lbJt/+/A/fV0q+tuAkjaddD5NqyGWhSSdqN833qNKJ8FfLDt16fSmHEV4GLb99dzD6OUfmz7pAeSlqHsQNqmnvox8JHegqm2kvRF4B+2PzDm/EeAh9p+UzORDZ+kJwG9njpn2r6wyXiGRaVf15OBX7n2RJJ0qe3HNxvZ5NUeSDsADweOs31dPb8JsIrtHzcZ37DU0i3fBN5JKVezK3BDm3d1SnrWRM/Ppp2BI5Ng7pG0FaUrO8Bltk9rMp5hatMPXhSSjrP9ivp4vi7lkk6xvc34X90udZufeuUyukTSebY37W8EJOkXtp/WdGwRXTVOM67WNn3tJ+mXtp/adBzTRdL5tp/Uf7Mm6ee2n9F0bFMl6VDgYNuXNh3LsPStnFkOeAJl51//KtjWLmAYS9LVwOZjtrd3gqQlgcfUw6t65SS6oiZeN6+Hv+rbFdhKdXHNzb3JRUlbUmpp/wH4vO3WrjiUdLTtV0va0/bnmo5n2GopucMpDfAurqc3ptRPfZ3tfzcV23SoC/n6V4p2YfLjV7Y317wG9YsDF7R5slHS+ravrI8f1F+TX9JTbJ/TXHTD0zfG7L8vP8P2hLmyGI5RKpEBQE0odyap3G+8BLKk1SmrK1ubYFZ3u/Gu2/d4a2oTvKr1tcEl7TLg3NzH7kBjoOr2euN2kaRPUrYedaZOsaSXAvtTVtGI7q2E3ZAFt1F14mez1uNfl/mv7czxv2L2k/RU4GnAypL27ntqeUp5mi44RdLLgG93sRwBcGddqf3bumL0Osr7S2tpXuf5xYHdJF1DScK2vvM8HWzKOIE/UUpldIqkZwNHAddSfiZXl7Rr2z8PxriLMv5aCniMpMe0/PqOo5QcuEXSEyi75D5OSVR+EXhdg7FN1ZNqAv21kr7KmIbtbS9TZvs2SrmdtZm3sO1y279rMKyhk/Qi4EBKOZrrKTWZr2TeNbfZGZLeByxdd3G+BfhewzFN1TFAbxHGL/seQ3lPaf0Cjao3efpXSS+g9CVbrcF4pqxvjDnQbBpjjkyCuW4VHvRNWZyyzahT/y8kPZTSQXkn4JGU+qJt1tVuvBMlDrqQVNhswDlRtkQ/ko7U6QJeDcwB3gq8HVid0vG7Kz4JbGv7ioW+smUk7Qs8m5Jg/gHwfOAsOvCzKel1wJ6UQdVFwFMoA8rW1iCrlqTU11ycMtHY8y9g+0YiGr69KZNU90q6k45N6gB7ActQ6m1+mPIzOXALf4t0tvP8KOyA65usugb4maSTmX+V9qcbCWx4DgS2sX0VgKTHAMdSygW2Xkc/75a2/Zf6eGfgK7YPrJNzFzUY1zB8CfgRpY/O+cyfYDbt7q+DpEfVh/cybwXz3PNdWOFbfZjyu/bTusp3S0ruoQv2AXYHLqX0TPoBZVV6m2mcx4OO2+wjklYA3kHpkbQ85f68zVozxuxUUnUitvtvQpG0HGUm6o20P/kKzL2m7YBXUrbAnQisbbvVMzZVV7vxLlPrHs2hzJBuwrwVom2+LgBs/3fvca379CrKKu1zgI82Fdc0eEnd4ncnpfEYkvYEurLt7+9dTC5X21NWA11oezdJq9L+AWTPnpRJnnNsbylpferPZ5vZPqPW8H287dZfzyBjxyxdY/vXMLfe9Nu6UDqp1wtCpenrZb1rqmOzDSjb2ltpgkUaXZr46P3O/bH+WbL+6YolesllANv/J2mJJgMasi5+3vUnfLYC3gtg+/7+3YBtZPsg4CBJh9h+c9PxTIOTKe+ZYxPnK1N263Rlt9U9tm+SNEfSHNunS9q/6aCmSqXR61G2d6ZDDZaZ/3N87Gd6Fxa2AWD7+/XhLcCWTcYyLG3qNzYyCeYela7se1GacB0DbNahOmvXU+rifQA4y7YlbddwTMPS1W68fwV6q2L+1ve4d9x6tWbVayiziL8Ctu+/yemIXVkwmfyaAefa6jxJ32Reo1QAbH+7uZCG5o56s3avpOUp76OtXjnT5846CdertXalpPWaDmoYbN8naaWm4xg2SRNuT7R9wUTPt4WkTYEjqUk9SbcAr7V9fqOBDcchzL/N9LYB51ql6xMeAF2drOpznqQjgKPr8asoK0e7ooufd6dJOo5yr7AitcSjpIcDra2/3K+XXO5aDd+xjeAkrUlZYPOfwMcaCGm63Fx77JwJfF3S9ZRV261Wx5grS1qyzbXOB1hN0kGUiY/eY+rxI5sLa7gkrQy8HliTvnyn7dc2FdOw1EUMBwOPpUyCLwbcNpsm+kcmwVxLRryD0jnzK8Am7lBH9up9lFrLhwDH1IRQV5wi6SMe040X2I9SIqOt3tuVgvqDSNqDsqrkVOB5bZp9WxSSdqLsGFhL0kl9Ty0HdGXiCsrWotuZ1+Ubykx3FxLM59WJx8MoN9v/pkzUdcGf67V9B/iJpH9S6pB1xYX19+54ShIPaP3Ex4H176WATSlbawVsRJmge/o4X9c2XwHeYvvnAJKeTkk4z5oaclOg/rrZdQKrM+Pt+r1a1/aRdWy9nO3fNx3XsGheQ8N+t1Cac33Z9p0zH9VQvBnYg1KWRpSE0BcbjWi4uvh5txflvvXhwNP7mjI+DHh/Y1ENkaRtKYtrejV81wCuoBs1fJG0LuV7tTnl8/1tHWuu+WLK7s23UyatVqDcm3fBtcDZdZzZP8Zsc7mkd/U9Pm/Mc2OP2+y7wM+BnwL3NRzLsH2eku87nnKfsAvw6EYjGkPd7B2zIEm3ATdQbmAW2IrZ8jeL+dSGAjtRfvjWBfYFTrT9f40GNgXqaDdeSRfYbu2qpoWRdD9lwHgD89+wdaHpUa/D91qUpiv79D11K3CJ7dbP4o+SusJkeduXNBzK0El6FmXg/6OurMaQdOSA0+7ICoVvAB+1fWk93hB4p+3XNBrYkEg62/YWCzvXRpK+DfyMeb0h3gJsafsljQU1JLVm/abAerYfI+kRwPFd+L71SPocZRv7sfXUDpQdZUtTPh9e3VRssWi68nknaX3bV9bHD7J9V99zT+nCAhVJF1PKf8xXw9f2GxoObUrqZ/b7KYnyTwLH2u5aoqvT6ufdAtq820XSx2y/r+k4ppuki2w/oek4poOk82xvKumSXh5F0i9sP63p2HpGKcH8QSbuvNjaN4uJSHo8ZYXlK2yv03Q8U6WOdeOVdKHtTZqOY7rUBOy4uraiuaskrUbZjrMF5X30LGBP239uNLAh6KsNvrbt/WoDlofZbu0qZknL2/7XeCUk2t6dfRQMGhx3YcDcVwLk1ZQmf8dS3lN2AP5pu/Wr8upW74OY11zsp8Betq9vLqrhkHQRsAlwQW/s0n+T0wWSzrT9zEHnJF1mu1UrKyUdZ/sVGqcDfce+d0+k7PIwcHbbSwr1L0IZuyClKwtU+pIlF1N2F98v6VzbT246tqmQdB/wJ0ot5gUSy7bfNuNBTQNJLwX2p9SV7vUQ6kpd/s7pyvvGwkj6CPAL2z9oOpZhk3QmpdTO4ZTJ778Cr7G9caOB9RmZBPOoqtsXb3LLv9Ga1413oLbW6pJ0M2Wb4kC2XzSD4cQkdX2AJeknlJr1vdqNOwOvsr11c1ENh6RDgPuBrWw/VtKKwCm2N2s4tEmT9H3bL5T0ewY0mbHdiRrTkh5DWSW6qu0NJW0EvMj2RxoObcokHUvZkvk1yvdwZ2BZ263uzi7p9Ametu2tJng+GtZL/PRuUuvusl92LEl5BfDc3riyjj9/ZHuDNi4KkPRw238db8K/KxP9kv4HeDnzSne9hLK6vrWfB/0/b2N/9tr4sziIpJ9SvlcfBx5K2fW42WxajTcZkl7DxAvbjpq5aKaPpKuBbd3BRuC1ju+7KQvb+uuDt3acUidyns389wVzdWUBikpj4gdT+gbdQ4fuy+tn+d8p9ZffTtmt80XbVzcaWJ+RSTD3FTEfqAszibXo9yeAfwAfpiSDHgrMAXax/aMGw5uSvpUXA7vx2m5lN15JvwVeN97zts+YwXCGTqPReb7TAyzo7mpKmDebP+ZG7uLZNBMcg0k6g1JP7st937vf2N6w2cimTtJSlJqpvZWUZwKHtLj+68jo+I6Pd1JKr21NSQi9FjjG9sGNBjZEkv4L+BLwO8pYZS1KmZOfAa+3/dnmops8Sfvbfs/CzrVVnRjYpPceKWlpykr7xzYb2eR1eQWzpEcDqwIXAXdQ7lVfRanBfLK70fC187pS2moQSacA3wTeCbyJ0tD9hja/Z0q6C7iOwQnmzixAiWZ1punIIhiFD6rPUxr9rUDpNPx82+dIWp+yDbW1CWZ3txvvv9ueRJ6IR6DzfPX3riaXqxsl7cy8mpQ70Z0mhvdIWow6EVJXLNzfbEjDIWkL4CLbt9Xv3xOBz7Z1x8cAy9g+t1Q5masTdc9rkuQz9U/nqDTj2oUFO3y3frKf0uvjGMpqSiirz4+kJGVbzfanJG0N/AtYD/gf2z9pOKyhsv0DlcZc61Nuwq/sm9hpZXK52poybu73/AHn2upayirD3vfqQZRJgjZbrS6QUt9j6vEjmwtrKD4LvM92r3na/cBRkjYFPghs21Rgw6DBzULn6tAO1fMkfZPSXHNujXC3u9lyz0NsHyFpz3qvfkZd2NBml3dh58OikPRIyoRV/xhz3F3jbVHv7T7Igtc2ayYHRibB3JWtKAuxuO1TACTt59r8wfaVY27AW0vd68bbmc7rI67LAywoq9Q+T0l2GfhFPdcFBwEnAqtK+iiwPfCBZkMamkOAjSVtTNnmdwRlZ8uzGo1qeG6UtA7zJge2p9Qia702DCCn6AfAOcCldGRCp8/KtvsbUP6vpL0ai2bIakK5U0llAElb2T6tlrzqt7ak1n6eS3ozZQX22pL6G9guB5zdTFTDI+lgymfAXcBltaSXKQn1s5qMbQje1ff4vDHPjT1umzU9oKGy7fPqIqK2+1TTAcyQ5YHbgW36zpl5pWrarJdf+KukFwB/AVZrMJ5YRJL2p/T2uJx5NdDNBGVJW+QISmmM8xlQ3302GJkEs0q3+fFmEm1795mMZ5r036TdMea5VtdC0YLdeHd3N7rxfn3Azcxcbb2h6ekrkTG2tMniwJK2u/Ie1OUBVq/GeVdWW8zH9tclnQ88p556SYdWo99r25JeDHyursTYtemghmgP4FBgfUnXUSbsdm42pKGZ9QPIKVrK9t5NBzFNOrfjY4JyVwB0pNzVsyi7/watnGzz5/kxwA8pJU326Tt/a0fqbfYSredTJot7fjbzoQxXxxdHLTXBc0vPWBTTZzfbr2k6iOlme7emY5hGH5G0AvAOStmr5Snjsjb7XO+BpGUpObDbJnh9W70EWM/2XQt9ZfvcYvuHTQcxkVGqwfyyAacfBewFLGa79TNStWPtbZRk3tKUhDYyhJIAACAASURBVBf1eCnbSzQV21R1tRtvnfgYj213ZZUoAJKWo6ykeSNwou13NBxSTKA2zRmPbX94xoKZRupY5/meupXvR5TV5s8AbgAu7FJDLoDaaGyO7VubjmVYJP3K9uZNxzFdJL0d+Dfwfebf9dH6hFdtCvd54KnM2/GxZxeaqUnaj9K1/GjK2PJVwHK2P9loYLHIJK3C/A2rulIyqXMknTTR820us1Ab2Z5m+7Ax53cHtrG9QzORDUfba2QvqtovYncWbITXqfvXLpH0Fspk44Mpn+O3Avvb/mKjgQ2RpB8CL7f976ZjGZZ6rwrwCmAxyqR3//h51ty7jkyCuZ+ktSm1ip9J2fJ9hO27m40qJjIq3Xi7qtbb3ItSc/MY4DO2W72iq5+kx1DKEaxqe0NJGwEvcou7lwNIGjQB8GDKYPIhtped4ZCGrq/z/AmUgVbrO8/3SHoY8ErgXNtnSXomcKTtdRoObSgk7UmpbXsrcBilxvQ+vVJRbSbpE8zyAeRUSNoD+ChwM/M+2zvRYEbSSmMT5ZLWst36kliDJj66Nhki6UHAy1iwPvh+TcU0DJK2BT4NPAK4nlJ+5wrbj2s0sCGpJfQ+DmzA/Imu1r6nSLqBsrjmWOBXjGnM1eYeLpJWpaw4v5t5fZI2BZYEtrP9t6ZiGwZJV1J2rwysUdmhz/LjgSspY839KJOOV9jes9HAhqDmiz5HmSy+H/gl8Hbb1zQa2BRIej+lAfFbe9fRd52/6sK9D4CkE4CNgVOZfwzdygWJAJJOn+Bp295qxoJZiJFKMEt6LKXMwibAAcDXbHeiIVC0l6RnAf+0fYmkV1AmPn4HfLHtWzskPZSytWgH4CvAwbZvaTaq4asrRd8FfLnXPEHSb2xv2Gxkw1NXn+9JSS4fBxxo+/pmo5q6Lnae7yfpCZSB/ysoJSS+bfvgZqMaDkkX295Y0nMp5TL+HyWB3vpVQ+MMJGfVAHIqJP0O2Nz2jU3HMmySzqY0Wf5XPX4sZdKq9Z8Hkn4BfAH4BmViYCdgD9tPazSwIZL0I+AWxpSnsX1gY0ENgaSLga2An9reRNKWwE6239BwaEMh6SxgX8rCoW2B3Sj3ufs2GtgU1AbEW1N+zzai7OI81vZljQY2RPXnsPfeeJnt05qMZ1hqWaFfMzjB3KXP8gvr+8kltjeStATw4y5cn6RzKJ93vXJXOwL/3eYJVUlXARt7XuPa3vmlgYttP6aZyIZrvHKAWZA4M7pS/3Sh6gzbppSi+2+nDBqX7zW/68K2zC4b0I3XwI3A6ba/1kxUUyfpC5RB41L1TX9Zypb2p1ESsq9qMLxh+ANlW/6RlJItu/c3nLT96YbiGrZlbJ87pplmJyavJK0E7E35WTwKeKLtfzYb1VBdS8c6z9cV9Tsyr/brNyk32ls2Gtjw9X7h/ouSWL5YHelo28Hv1ViXMa+MV9d8DPhebQq0HvBV2v9Z3vNKykqnz1FLCtVzXbKa7ec1HcQ0uMf2TZLmSJpj+/TaCKkrlrZ9qiTVcjQflPRzStK5lWqvmR8BP6or63cCfqbSyL0TE8W2TwcmWpnXVld3Icm6CHqN8G6u/ZL+Rtn90QWyfXTf8dckvbWxaIZkbHK5nrtDUmcaLts+qibNH2X7qqbjGbY6vhxblmbW7LIamQQzsBllMPxOyorKsU3HWruFakQM6sa7ErCzpA1t7zPg+TbY0vYGtYbVdcAqtu+T9GVgge7KLXQA8yYGlmsykGl2o6R1qNcqaXvgr82GNHWSDgBeSmmk9vgu1bLqM7DzvKSDoLXbqa4Efg5sa/tqmFvztmvOl3QKsBbw3rrKvjMD5Nk+gJyi+4CL6krtTmxf7LF9cl3FdQrlc+8ltn/bcFhDYfta4MVNxzHNfiHp8bYvbTqQIbu5NnU6k9Jg+no6MhFe3SlpDvDbmgS6Dlil4ZimrCaWX0BJLq8JHER7G05G9xwqaUXgA8BJlIVSE/VvaZPTJe3DvB07OwAn14U3bV2c+GdJz7F9av9JSVvRgfvWnloS6lOUkjtr1d2c+7W5bn2PpC8BywBbAocD2wPnNhrUGCNVIiO6p24fO9/2E5qOZTL6m0CMbQgxKg0iuqDWrzqUsvL8n5RSBDvXm/HWqrPZd1FuQvs/LETZ4rd8I4EN0XjbqHrauJ1K0naUFcxPo6x++gZwuO21Gg1syGoy4QnANbZvroP+1Wy3fnJuvAGk7d0bDWxIurh9UdLBzP8+uRVwDWWXRCeS56NA0uXAoymf43cx7/Ou1c1RVZqh3gHMoayoXwH4elf6YUjaDLgC+A/gw8DywAG2z2k0sCmQdBSlfMQPgW/Y/k3DIcUikrTNoH4QklYHdrR9QANhDZ2kB40t5zioD0EbSZqob0Ire0ZI2oAyEXAWpQyUKYswtwBe3JXyO5LOp4zBftZXuvJS249vNrKp6ytH0/t7WUr5w22ajq1nZBLMmtd5caCuFNsfRZIuanGC+c+UpiuilG7plYwQsJft1ZuKbRh6q0DH07Ub7noDN8f2rU3HEotO0pJAr+7YVbbvmej1bVF/Hl9CWfm0FaXEyYmDbnraSNIWwEW2b5O0M6XJ3+fq9uhWa8MAMubXxcmqUSRpjUHne+8rklZsW5mouhjjx7b/s+lYpkO9vk/YflfTsQxTneS/rR52cpJ/FKj0o3k5ZSz2SMo47J3NRjUckk6m7NK5px4/DDjZ9pOajWxq6gKGp9o+u+lYhknS5yk1pdej7JATpWTZ1weVzmgr1ebDvRrh9dwlbZ8ohvmu7RzKLuObgN/YXrfh0OYapRIZEzXnMOXmO2ap3naUMVYEdqG8MbbVYcwrHdH/GMqqtbY7f+EvaT+N6TrfV9u9K9vZO0vSsymJ12spA63VJe1q+8wm4xoG27cBX6dsh16JcoOzD2XrfhccAmwsaWPg3cARlHq3z2o0quG4o/59u6RHUAaQnVmBXlcGLbDCoY0rgnoWNYEs6QTbL5vueGJyFmGC6lTKZFZr1NJrt0tawR1stFyv70m1/nJnVk7ZntN0DDE5tWTXdpQa9Y8BTgTWtr1ao4EN33eA4yW9DFidsjq29clz2/dL+hTw1KZjGbLfUkpHPJzSn+VY2xc1G9K0+I2kVwKLSVoXeBvwi4ZjGpbvS/oPShnSCyhj6VmVMxqZFczRbn03o73a2abccJ8OfMS1W3tEE9TRrvOjoG6jemWvCURtkHds21dfjIJeGSFJ/wNcZ/uIrpQWkvT/gIMpk99fqKcPt/3/motqeCQ9pO9wKcrkx0q2u1K7cVz9K2raRtLvgHMoNd7PtH15wyHNuLZ+/yQdBzwF+AnzVsV2ZieZpAOBdYHjmf/6Uq84ZpykOyh1UT8AnGXbkq5p8yTqeCTtATyPssjmjbY7kciT9CFKP6Rvd2niCubu1Nmx/lmKsqr5G7b/r9HAhkTSMsD7gW0ouaMfAx/u0iptmLvAbanZNnE8UgnmekPzSmD9euoK4Jgu1AmKmK3qtuE9KdtxoPzeHWT7q81FNVySfmN7w6bjiAdu0Japrmyj6jpJZ1BqTL8WeAZwA6VkRhdqrC0NvJlyXaYk9A7p2uC4n6SzbD+96TimW5snQerNzOaUn8stKOPpi21v12hgM6it378u1j3vJ+nIAadt+7UzHkyMPJXGyjsCDwaOoawW/UlXEsyS9u4/BF4NXApcCGD704O+rk0k3Ur5/t1H2VXWydI0kjYBvgJsZHuxpuOJhZP0NOqu6d652ZRXGZkSGZIeC5xGmcG4kPImsRnwPklb2b6yyfhi4SStAuxBqRlk4HLgC7avbzSwGJekXYC9gL0p2zhE2Vp6gKRZ9WY4RV3tOj8KzpN0BHB0PX4VI1LapQN2oEwav9b23yQ9irJlrAuOAm4FenXsd6KU/3hFYxEN0Zi+GHOATZm/RFTMTvcB99S/7wf+DmQM1gJdSSSPx/ZuTccQ0WP7M8BnahPwnSilJB4h6T2UGsxtXyk69vP6xL7znVi9aLuzYxJJS1BWne8IPAc4A/hQo0ENUd2N+k4WTMK2viSupKOBdYCLmLdr2pR7hFlhZFYwS/oWcJzt48acfxlle3Tq4c1itZnTMcD/UpI/vUTlrsCr2lqEf6J6eJI2s/3rmY5pmGoB+h1tXzvm/JqUrThPaSCsoetq1/lRUFfk7QE8nfJ9OxP44tiu2DE71W1+69r+ad0St1gXmmxKutj2xgs711aSTu87vJdSA/1TvVI1XdbWEgsAkm6nrFL7NPBT2zc1HNKMa+v3r4t1z/vVhMIhwKq2N5S0EfAi2x9pOLQIACQ9njIp/grb6zQdzzBIWnPAPV7r718BVBrqvApYy/aHJa0OPNz2uQ2HNmmStqZMeLyAUsLlG8B3as+WzpB0MfAlFixd2foFRJKuADaYzWVbRinBfJXt9R7oczE71ETlm21fOOb8E4Av2968mcimRtJ5wNZjO5JL2gY4wvbqzUQ2HJIut73BA32ubRbWdT5mp9p5/ijbOzcdSzxwkl4PvIFSu3ed2sjjS7af03BoUybpfynXck493hzY1fZbGg0sxiXp3cCBtu9byOu2sd3KRpuSXkyZjHsycDelac6Ztk9tNLAhk/R0ysTVkZJWBpa1/fv63EptLK3X9brntWTSuyj3BJvUcylfFrOKpMUpC2++1nQsw1D7mLzI9nX1+JmU3cVdKFV2CGWnzla2HytpReAU25s1HNqk1cn9Y4AT2vg5tqgknd/VXjqSjgfeZvuvTccynpEpkUFfw4cH+FzMDsuPTS4D2L6oduptqy8Dp0va2vYNALXr6Ucps4ttd8ckn2sFScvXBpOtXzE5ilw6z68saUnbdzcdTzxge1ASXb8CsP3bWkqptSRdSllluASwi6Q/1uM1KGWhOqF2wN6FBbcvtrnh2BrA+ZL2mGhXVVuTywC2vwt8V9L6wPMpJbDeDSzdaGBDJGlfSsmW9YAjKb+LX6PUnKatN+UDVpt/VtJZQCcSzMAyts8tiw7nurepYGK0SVqeMkZ5JHASpbnmW4F3ABdT3lO64E3AdyRtS9lZ/DHgv5oNaWg2d2kk3asr/U9JSzYd1FTY3rLpGKaTpJXqw+9JeguldMvcHalt/fwGkPQ9yv3AcsDlks5l/mt7UVOxjTVKCeZVxhSk7xGw8kwHEw+YJK04YKXvSpT6ja1k+zBJdwKn1VXLO1A+rLccu+WopR4r6ZIB5wV0YVvmMcALKVtwTLmuHtONa+y6a4GzJZ3E/J3nW9+gZATcZfvuXkKhrgxq+7asFzYdwAz5AXAOpdzC/Q3HMhS296i1pQ+WdCVlu/79fc9f0FhwQyLpBOAJwNWUxpO7UCd4OmQ7YBNK3whs/6XlCxmAkah7fqOkdaifAZK2B2btCq/ovKOBfwK/BF5HWV2/JPAS2xc1Gdgw2f61pLcBpwB3Unbl3tBwWMNyT93p2HtPWZmOjFc6bOz9+Lv6nmv7ffmnmg5gUY1Sgvkwxh9IHT6TgcSkfAY4RdI7qYN+4EnA/sBnG4tqCGwfXZPMFwJ/BLboUF3DxzYdwHSy/cL691pNxxKT9pf6Zw7dutkeBWdIeh+wdK0r9xbgew3HNCUjVFZnKduDJv1bzfYFkt4PnEBpwtKb8DDQ+uYywCeACxZWBqTl7rZtSb2kwoObDmhIDmTez2Ov7vnLG4tm+PYADgXWl3QdpSdGyl9FU9bulYmQdDhwI/CoLvSIgPlWU/YsA9wCHFGbuM+a1ZRTcBBlBewqkj4KbA98oNmQYiJdvh+3fQaApP1tv6f/OUn7Uxo1zgojU4M52k/SCylbMR9H+VC7HDjAdmsTCn3boUXZXnsDZRVlmsS1iKRTx9Z9HXQuIoZH0hxgd2Abynvmj4HDZ3PjiygkvR34N/B9urN9cRVKEm9t4C22L244pKGrjTT3piRK3lDrnq9n+/sNhzY0dSHDusDWwMeB1wLH2j6o0cAmqW/3pph/ZZehe7t16oTAnK4k8qKdJF1g+4njHbedpGdN9HwvGdZ2tRzUcyjvm6favqLhkGIRSNoD+Lrtm+vxisBOtr/YbGRTN+i9RNIlsylnlARztJ6kvWy3chXzeM3hekZoNVsrSVqKMmt/OvBs5t24LQ/80HanV3B3QW14scAHoe0urDbsvLplkQ5tyRwJdfD/UeBm+lb52m7t9kVJv6Psqjqsq5Mckr5J2YK6i+0NJS0N/NL2ExoObajqjoi5E1e2f9JwSJNWa0pDqSm9GfBdynVtS2nQ+LqmYhuGccofztW1BHq0g6T7mFd2TZQ69bczbwHR8k3FFotG0n6UUlC/sJ1+XS0i6aKx4xJJF/YawLaRpDdTdmquDfyu76nlKD+jr2oksAFGqURGdNfetLdMxhLAqmMbAkl6BmXbfsxub6Q0OXoE5aa7l2D+F/CFpoKKB+SdfY+XAl5GGgPNaipFl/elNMxRPXUfcLDt/RoNLhbV3sCjbd/YdCBDdKXtQ5sOYpqtY3sHSTsB2L5DY7qqtV3f9tOfDDjXOrY/BCDpFOCJvZW9kj4IHN9gaMPSK23VS6CfVI+3Bc5sJKIYebYXazqGmSDpKcDBlJKISwKLAbd1JIF+LbATcJCkWynJ5jNrs9uY3eZIUm+yv9bSbnWDRkrfpx9Sdlbt03f+1tm2+6+1zdEi+rT55uazwKBtfHfQ3qT5IqkroVrN9udqvad32l7b9lr1z8a2P990fLFwts/v+3N2rQu7edNxxYT2ArYANrP9ENsrUb5nW9TSCzH7XUZZzdUlD286gBlwd1213LtpW4e+EicdsfWAc8+f8SiG71HA3X3HdwNrNhPK8Nj+UE2iP5SSQH+H7XdQ+rSs1mx0EZ33eUoS9reUVdqvq+daz/ZXbL8W2BL4GqVm/deajSoW0Y+B4yQ9R9JWwLHAjxqOaUps32L7Wts71R3ud1DGYstKelTD4c1nZFYwS/qs7b3q4z1tf67vuf+1/ZrGgoupavNW1DVtXzL2pO3zJK058+HMqKc2HcCw2D5Y0tMoN2uL953/amNBxSKRtFLf4RzKTenDGgonFs0ulE7lc1e/2r5G0s6UTuafaSyyWFT3ARfVEjX9NZjf1lxIU7aMpE0YZ9Lb9gWDzrfMvpSbtNUlfZ0y0fOaRiMakv7tp5L6x2XLAWcP/qpWORo4V9KJlHHzdsBRzYY0VJ1MoEfMdravlrRYbf56pKRfNB3TMNTmjBsAf6esXt4e6MLn+Ch4D/AG4M2UMdkpwOGNRjQkkrYFPk3ZPX09pYfXFZQeZbPCyCSYgWf2Pd4V+Fzf8awpih2D1a0pgxLJvbpWbbXUBM+1+bpGiqSjgXWAiyiJEyg/r0kwz37nM6/x0b2UzvO7NxpRLMwSg0or2L5B0hJNBBQP2Hfqny55JKXJ36AEs4HW13W3/RNJFwBPoVznnh0qc9Ka7aeTYfujkn4IPKOe2s32hU3GNGRdT6BHzEa3S1qSMmH8SeCvwIMbjmlYHkIp+XEz8A/gRtspodcCtu8HvlT/LEDSCbZfNrNRDc1HKGOwn9reRNKWlF0Es8YoJZg1zuNoAdvLLfxVrfRrSa+3fVj/SUm7UxJfrSZpvI7JotSf7opNgQ262tipy2qJk2iXuyf5XMwStidM/LR08H/1iDQHXQr4J+UeYgNJ2G59rVvbtwC3UG/UJK1CudZlJS1r+49NxjcMdRV9J1fgjUACPWI2ejtl999b6+PV6chKUdvbAUh6LPBc4PS6Ujuld9qvtQ2lgXts3yRpjqQ5tk+XtH/TQfUbpQTzHEkrUt4Ee497ieaRKMQfs9JewImSXsW8hPKmlEL02zUW1fAcOMFzV85YFNPvN5SyCn9tOpBYNJLebfuT9fHLbR/f99zHbL+vuehiITaW9K8B58XEu0KiPdo8+O+sehOzA6WG9v31tOlQM7U2bD+NBUn6FHBkfwnEiJh2hwG72r4U+FBtALsXpfFfq0l6IWXC6pnAisBplFIZ0X5tXhB2s6RlKeOur0u6nlnWnF6jsuBO0rWUwfDArYu2czMTjanbGzash5fZPq3JeGaCpCVs39N0HMNQ64g+ATiX+euJvqixoGJCki6w/cSxjwcdR8TMauPvoKStbf+k6Timk6SrgI1sd62x31ySLqaUM5lv+6ntNzQcWkxA0uuA3SiLp44Ejq2r0iNimkhaG/gW8Crg6cCrgW278Lsn6QuUJN7Pbf+l6XhieNo4xuyR9GBKg785lN+7FYCv276p0cD6jMwKZttrNh1DxFh9DcYurn/mO9+Fun/9JInSjfeVwLbAqs1GNDQfbDqAeMAmKpuUMkoR8UB9WtK4qzZsd6HfxzWU8ladTTDTgu2nsSDbhwOHS1qPkmi+RNLZwGG2T282uohuqg2Wd6T0VPgT8FzbdzQc1lDY3kPSqsBmteTjubavbzquGIpW3udJWgz4ru3/pCycnZV9BkYmwSzpURM934XaatFK/Q3G+m9Me8edWFkvaXNKUnk7YCVgD+BdjQY1RLbP6A1C6qkMQmY/j/N40HFEzKw2Dv5fSpk0/dOY82sAXVn9dDulmdOpzL9b523NhTR0s377aQxWb77Xr39upCzc2FvSG23v2GhwER0i6VLmHyuvRCk5+qtal7/1E6qSXg58CvgZZUxysKR32f5Wo4HFuCS9GzjQ9n0Leel7ZiKeYbN9n6TbJa0wm3cJjFKJjN4bYf9Ni4GVgVVspw5zxJBJ+ijwCuCPwLHAicB5XWusJukVwAHMG4Q8A8ggZBaTdB9wG+X7tTQlcUI9Xsp2l5pQRswKizr4l7SN7VNmKKyhkPR94H22LxlzflNgX9vbNhPZ8EjaddD5hTVtbJO6/fROymfBrNx+GguS9GngRcCpwBG2z+177irb6zUWXETHSFpjoudt/2GmYpkutVzS1r0FQ5JWppRO2rjZyGI8tazJFsAets9uOp7pIOk44CnATyj3scDsmugfmQTzWJLWpMxe/CdwkO3WF6OP9qlbbvoZuNH22BVQrSTpBuAq4LPA923fKemartU8zyAkImLhujz4l/Qb2xuO89ylth8/0zHNNEkn2H5Z03HE6JH0WuAbtm8f8NysXu0VEbPP2M9tSXOAi0fhs7zNam7lYOBK4BDmNSTG9gVNxTUsbZjoH7kEs6R1gfcDmwMHAkd1pdFYtE9tDjfWSsCSlKYyF81wSENVtytuA+xEaZpzOmVSZ3XbndlymkFIRMSi6ergX9LVth/9QJ/rEkkX2t6k6TgmQ9KtDC6PJEoz8OVnOKR4gCQ9klKSZm4JSNtnNhdRRLSVpAOAjSg7cAF2AC6x3cryCqNE0rOBE4D+Ui62vVVjQY2QUarBvCElsfw44JPA7otQnyViWtnectD5uqX2IOCZMxvRcNXfsR8CP5S0FPBCYBngOkmn2n5lowEOz48k/Zj5ByE/aDCeiIhZyfYFkt5PGfyvQ9/gnzIR2Va/lvR624f1n5S0O6Xfwiho7aoV28s1HUNMnqRPADsClwO9+ztTamlHRDwgtt8l6WWUXVcCDrV9YsNhxQQkrUJZQLo2sJXtixsOaejqYtmPAxsAS/XOz6bd4SOzgrnW2/wTcDLzBh5zzaa6JREAki6wPbaERidIWh7YbjZt55gMSY8GVrV9tqSXAk+nDEL+SanZ+LtGA4yImEXGDP7f0qXBf230eiJwN/MSyptSdiRtZ/tvTcU2U7o8bonZTdJVwEa271roiyMionMk/Q7YHzjMHU1ySjoL2Bf4DLAtsBslp7tvo4H1GZkVzMDutHhlRYyWeqPa+p9XSXuPOWVKZ++z2p5crj4LvA/A9reBb8PcFeifpbzxR0RE8UvK4H+Xrg3+bf8deJqkLYFeLeaTbZ/WYFgzTQt/ScS0uAZYAkiCOSImLeWSWu1K24c2HcQ0W9r2qZJUm2l+UNLPKUnnWWFkEsy2/7fpGCLGknQwC36IrQQ8Ddhz5iMaukFbTtcE3i/pg7a/McPxDNuati8Ze9L2ebWRaEREzNP5wb/t0yn9BjpD0ruBAxehtFxqU8aM6htH3w5cJOlU+pLM2aEaEQ9EyiW12sObDmAG3Fl7Pf1W0luB64BVGo5pPiOTYJb0PSZYEWr7RTMYTkTPeWOODdwE7G37+gbiGSrbHxp0XtJKwE+BtieYl5rguaVnLIqIiHYYhcF/F60BnC9pD9tnj/ci26fMYEwRMG8cfT5wUpOBREREo5aRtAnj7KZqcyPpPntR+lm9DfgwsCWwS6MRjTFKNZifNdHzts+YqVgixpK0DNDrMH/VKNSQa3O3+R5JxwKnjdPUaRvbOzQTWUTE7CPpSmAnuj347yRJTwQOBq4EDgHu7z2X71vMdpJOsP2ypuOIiIjpUcub/JrBY0zbbnMjaWBuGc73Uyb+l6inbXuj5qKa3yglmB9l+49NxxHRT9ISwAHAq4FrgTmUbQ4H2/6EpE1sX9hgiNNC0lbAB9r+Rp+mThERi24UBv9dJunZwAnApczbFZjvW8x6XVjUEBER4xuF9/na0PZdlHFY/0T/HxoLaoyRKZEBfAd4ImQWO2aVAynbHNa0fSuApOWBT0k6BHgesFaD8U2JpP6b0J6VgL8wy7ZzTEaaOkVEPCBXJxnZPpJWoYxX1ga2sn1xwyFFPFCjsaIqIiK67Abbs7oc1CglmPtXy6zdWBQR8/svYF33bSWw/S9JbwZuBJ7fWGTD8cIxxwZusn1bE8FMly42dYqIiKh+CewP7OJR2foYERERbfLupgOYAftKOhwY29D2282FNL9RSjB7nMcRTbp/0M2a7fsk3WD7nCaCGqIbgHts3wMgaT3gDZKutX1is6FFRMQMG4XBfxddafvQpoOImIKBdd8jIqIzPi1p3DzfbKpTPAW7AetT6i/3SmQYSIK5ARtL+hdlgLF0fUw9tu3lmwstRtjlknax/dX+k5J2Bq5oKKZh+hGwO/BbSY+mrIL6OvBCSU+2/d5Go4uIiJk0RIeWHwAABRFJREFUCoP/Lnp40wFEDCLp3cCBtu9byEvfMxPxREREY14KrAr8acz5NSjlObtgY9uPbzqIiYxMgtn2Yk3HEDHAHsC3Jb2W0iTOwGbA0sB2TQY2JCva/m19vCtwrO3/lrQk5XqTYI6IGB2jMPjvomUkbcI4q0BtXzDD8UT0rAGcL2kP22eP9yLbp8xgTBERMfM+A7xvbMM7SSvX57ZtJKrhOkfSBrYvbzqQ/9/e/YPaXd5xHH9/RCQORYfaDLZ4idHB2oqSTtLBgKkgDhkk0TVk7lI62EKmDiWWCg4O2ZUOJR0URel10cVoxFxDRaIiomQvVHD5dDj3NukhuflDzu859573azvPd/kMB87z+57n+f6uJo5Sk8ZLchD4ObOHt/Nt/zk40i2R5NzWibQk7wMn2/5j8/MnbR8ZGlCSNJkkrzPb/J+bWz8AnGi7Gzb/u06SfwNnuHKDub64USMleQx4GfgMeIVL14b980OSVkSST9s+fJXaxrKf/L0eSf4F3A98xWwG89Y0hqW5AbgyJ5ilZdZ2HVgfnWMBziV5EfgW2A+8DZDk7qGpJEkjrM03lwHafphkbfo4uk4XbCJrWbU9m+QPwN+ZPXhvnZ4q4PdWklbDnm1qd06WYrGeGh3gWmwwS1qk48BvgTXgUNv/bK4/BLw4KpQkaYhV2PxLmkiSnwB/AfYBB9t+MjiSJGmMM0mOtz11+WKSY8xGc+548+M/lpEjMiRNLsnPgKNtT47OIkmaRpLXgPWrbP4PtT0yJpm2k+TJtu+MziHNS/IF8GfgVH2olaSVlWQvcBr4gUsN5QPAHcDhthdHZVslNpglTSLJj4FngeeAe4HTbX83NpUkaSpu/nemJBtcGjvwfyWWbPafVkuSN9o+PTqHJGk5JHkC2JrFfH5zFKkmYoNZ0sIk+RFwGHgeeJBZY+FI258ODSZJGsbN/86S5L7t6jvhyqZ2pyRn2z42OockSbLBLGmBknwPfAD8EXivbZN82Xbf4GiSJOk6JNkP7G37/tz6r4Hv2n4xJplWXZLPmN2My5Xqbc9Om0iSpNXlS/4kLdILwFHgFeDVJH8bnEeSJN2Yl5j9ns/7frP2zLRxpP+5l9lL/q7UYC5wcNo4kiStLk8wS1q4JPuYnTA5CjwAnGA2g/nzocEkSdK2knza9uGr1Dba/mLqTBJAko/bPjo6hyRJgttGB5C0+7X9su2fNh9CfwXcBbw5OJYkSbq2PdvU7pwshSRJkpaWDWZJC5Nkf5LHL19ruwG8BfxmTCpJknQDziQ5Pr+Y5Bjw0YA80pbfjw4gSZJmHJEhaWGSvA680Pbc3PoB4ERb5zZKkrTEkuwFTgM/cKmhfAC4Azjc9uKobFptSTaYzVq+ora/nDCOJEkrzQazpIVxbqMkSbtDkieArd/0823XR+aRkjwA7AW+mSvdB3zX9sL0qSRJWk23jw4gaVdzbqMkSbtA23eBd0fnkC7zV2Y35b6+fDHJPZs1b8pJkjQRZzBLWiTnNkqSJGkR1ubHsAG0/RBYmz6OJEmryxEZkhbGuY2SJElahCQX2u6/0ZokSbr1bDBLWjjnNkqSJOlWSvIasN721Nz6MeBQ2yNjkkmStHpsMEuSJEmSdhRvykmStDxsMEuSJEmSdiRvykmSNJ4NZkmSJEmSJEnSTbltdABJkiRJkiRJ0s5kg1mSJEmSJEmSdFNsMEuSJEmSJEmSbooNZkmSJEmSJEnSTfkvZ8QzEw9l2wMAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1440x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "model_xgb.fit(df_dummies_train, y.ravel())\n",
    "# Output feature importance coefficients, map them to their feature name, and sort values\n",
    "coef = pd.Series(model_xgb.feature_importances_, index = df_dummies_train.columns).sort_values(ascending=False)\n",
    "\n",
    "plt.figure(figsize=(20, 10))\n",
    "coef.head(25).plot(kind='bar')\n",
    "plt.title('Feature Significance')\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 259,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AACMCMzwf9q793jt5jr/46+3U5hQChVyKIckIdJBBxodhg5SOWQUqik1kSmVmlEaMwqd/EpDZZoalZLJIaVQIoecKUzS2ZRDlCLC+/fHd13u69723vdt77X391rrej8fj/3Y11prb/dn2Xtfa63P9/v9fCIiIiIiIiIiImJGlqodQERERJvWftep8/rv/fzQ7ef134uIiIiIiIgYJZnBHBEREREREREREREzkgRzRERERERERERERMxIEswRERERERERERERMSNJMEdERERERERERETEjCTBHBEREREREREREREzkgRzRERERERERETOpiXQAAAgAElEQVRERMxIEswRERERERERERERMSNJMEdERERERERERETEjCTBHBEREREREREREREzkgRzRERERERERERERMxIEswRERERERERERERMSNJMEdERERERERERETEjCTBHBEREREREREREREzkgRzRERERERERERERMzIUrUDiIiIiMW39rtOnbd/6+eHbj9v/1ZERERERER0U2YwR0RERERERERERMSMJMEcERERERERERERETOSBHNEREREREREREREzEgSzBERERERERERERExI0kwR0RERERERERERMSMJMEcERERERERERERETOSBHNEREREREREREREzMhStQOIiIiIAFj7XafO67/380O3n9d/LyIiIiIioo+SYI6IiIiYB/OZQE/yPCIiIiIi5ktKZERERERERERERETEjCTBHBEREREREREREREzkhIZERERETErqZ8dERERETG+kmCOiIiIiJhCkucREREREdNLiYyIiIiIiIiIiIiImJEkmCMiIiIiIiIiIiJiRlIiIyIiIiJiTPW5BEifzy0iIiJilCTBHBERERER0THzmUBP8jwiIiKmkxIZERERERERERERETEjSTBHRERERERERERExIwkwRwRERERERERERERM5IEc0RERERERERERETMSJr8RURERERExMiYzwaGkCaGERERs5UEc0RERERERMQ8mc8E+nwnz/s8ONDnc4N+n1+fzw3yntKmDDjOXBLMEREREREREREREfOoT4MDqcEcERERERERERERETOSBHNEREREREREREREzEgSzBERERERERERERExI0kwR0RERERERERERMSMJMEcERERERERERERETOSBHNERERERERE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\n",
      "text/plain": [
       "<Figure size 1440x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "model_xgb.fit(df_dummies_train, y.ravel())\n",
    "# Output feature importance coefficients, map them to their feature name, and sort values\n",
    "coef = pd.Series(model_xgb.feature_importances_, index = df_dummies_train.columns).sort_values(ascending=False)\n",
    "\n",
    "plt.figure(figsize=(20, 10))\n",
    "coef.head(25).plot(kind='bar')\n",
    "plt.title('Feature Significance')\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Output\n",
    "I used stackedCVRegressor of LightGBM, Gradient Boosting, Random Forest and XGBoost to train on my final dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred = xgb1.predict(df_dummies_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>COST</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>965.323425</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>371.976257</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>688.914062</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>294.791321</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>256.089417</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         COST\n",
       "0  965.323425\n",
       "1  371.976257\n",
       "2  688.914062\n",
       "3  294.791321\n",
       "4  256.089417"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "res = pd.DataFrame(y_pred, columns=['COST'])\n",
    "res.to_excel(\"output.xlsx\", index=False)\n",
    "res.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Hyperparameter tuning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "({'max_depth': 5, 'min_child_weight': 1}, -101071.45722846888)"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "param_test1 = {\n",
    "    'max_depth':range(3,10,2),\n",
    "    'min_child_weight':range(1,6,2)\n",
    "}\n",
    "gsearch1 = GridSearchCV(estimator = XGBRegressor( learning_rate =0.1, n_estimators=140, max_depth=5,\n",
    "                                        min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8,\n",
    "                                        nthread=4, scale_pos_weight=1, seed=27), \n",
    "                                        param_grid = param_test1, scoring='neg_mean_squared_error',n_jobs=4,iid=False, cv=5)\n",
    "gsearch1.fit(df_dummies_train,y)\n",
    "gsearch1.best_params_, gsearch1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "({'gamma': 0.0}, -101071.45722846888)"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "param_test1 = {\n",
    "    'gamma':[i/10.0 for i in range(0,5)]\n",
    "}\n",
    "gsearch1 = GridSearchCV(estimator = XGBRegressor( learning_rate =0.1, n_estimators=140, max_depth=5,\n",
    "                                        min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8,\n",
    "                                        nthread=4, scale_pos_weight=1, seed=27), \n",
    "                                        param_grid = param_test1,n_jobs=4,iid=False, cv=5, scoring='neg_mean_squared_error')\n",
    "gsearch1.fit(df_dummies_train,y)\n",
    "gsearch1.best_params_, gsearch1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "({'colsample_bytree': 0.5}, -98765.82815135036)"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "param_test1 = {\n",
    "    'colsample_bytree':[i/100.0 for i in range(50,55,2)]\n",
    "}\n",
    "gsearch1 = GridSearchCV(estimator = XGBRegressor( learning_rate =0.1, n_estimators=140, max_depth=5,\n",
    "                                        min_child_weight=1, gamma=0, subsample=0.99, colsample_bytree=0.8,\n",
    "                                        nthread=4, scale_pos_weight=1, seed=27), \n",
    "                                        param_grid = param_test1,n_jobs=4,iid=False, cv=5, scoring='neg_mean_squared_error')\n",
    "gsearch1.fit(df_dummies_train,y)\n",
    "gsearch1.best_params_, gsearch1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "({'reg_alpha': 1}, -98604.5050531101)"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "param_test1 = {\n",
    "    'reg_alpha':[0.5, 1, 5]\n",
    "}\n",
    "gsearch1 = GridSearchCV(estimator = XGBRegressor( learning_rate =0.1, n_estimators=140, max_depth=5,\n",
    "                                        min_child_weight=1, gamma=0, subsample=0.99, colsample_bytree=0.5,\n",
    "                                        nthread=4, scale_pos_weight=1, seed=27), \n",
    "                                        param_grid = param_test1,n_jobs=4,iid=False, cv=5, scoring='neg_mean_squared_error')\n",
    "gsearch1.fit(df_dummies_train,y)\n",
    "gsearch1.best_params_, gsearch1.best_score_"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
